2.2.27

2.2.27 #

解答 #

大致上会是一个对数函数,用 Excel 做了简单的拟合。

原始数据:

表中的 n 代表某一个子数组用尽时两个子数组之和,rest 是另一个未用尽的子数组平均剩余长度,times 代表出现次数,表中删去了出现次数小于 100 次的数据。

nresttimes
20.33137848576
30.333894213568
60.60389948576
70.59622382496
140.77326348576
150.79628516960
290.87980815808
300.88343216960
600.95084815808
610.935764576
1210.9851637616
1220.96875576
2430.936083520
2441.147569576
4870.9422551472
4881.020833576
9751.078125448
9761.024306576
19521.129464448

代码 #

var arraySize = 1000000;
var sort = new NotifiedMergeSort(arraySize);
for (var i = 0; i < 100; i++)
{
    var data = SortCompare.GetRandomArrayInt(arraySize);
    sort.Sort(data);
}

Console.WriteLine("n\trest\ttimes");
for (var i = 0; i < sort.NArraySize.Length; i++)
{
    if (sort.NArraySize[i] != 0)
        Console.WriteLine(i + "\t" + sort.NArraySize[i] / sort.NArraySizeTime[i] + "\t" + sort.NArraySizeTime[i]);
}
// 大致上是一个对数函数

另请参阅 #

Merge 库