我无法理解合并排序中的阈值以及如何确定它。我用谷歌搜索但没有结果。谁能为我解释一下?当阈值交叉使用插入排序时,我想使用合并排序对数组 [50000] 进行排序。
private int[] MergeSort(int[] lst)
{
int hl = lst.Length - 0;
if (hl < 5 || hl < 10 || hl < 15 || hl < 20 || hl < 25 || hl < 30 || hl < 35 || hl < 40 || hl < 45 || hl < 50)
{
RunTime run = new RunTime();
run.X = hl;
InsertionSort(lst);
run.Ttime = Process.GetCurrentProcess().TotalProcessorTime.Milliseconds;
_listRunTime.Add(run);
}
if (lst.Length == 1)
return lst;
int middle = lst.Length / 2;
int[] left = new int[middle];
for (int i = 0; i < middle; i++)
{
left[i] = lst[i];
}
int[] right = new int[lst.Length - middle];
for (int i = 0; i < lst.Length - middle; i++)
{
right[i] = lst[i + middle];
}
left = MergeSort(left);
right = MergeSort(right);
int leftptr = 0;
int rightptr = 0;
int[] sorted = new int[lst.Length];
for (int k = 0; k < lst.Length; k++)
{
if (rightptr == right.Length || ((leftptr < left.Length) && (left[leftptr] <= right[rightptr])))
{
sorted[k] = left[leftptr];
leftptr++;
}
else if (leftptr == left.Length || ((rightptr < right.Length) && (right[rightptr] <= left[leftptr])))
{
sorted[k] = right[rightptr];
rightptr++;
}
}
return sorted;
}
private void InsertionSort(int[] arr)
{
int i, j, tmp;
for (i = 1; i < arr.Length; i++)
{
j = i;
while (j > 0 && arr[j - 1] > arr[j])
{
tmp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = tmp;
j--;
}
}
}
我必须使用阈值而不是if (hl < 5 || hl < 10 || hl < 15 || hl < 20 || hl < 25 || hl < 30 || hl < 35 || hl < 40 || hl < 45 || hl < 50)
.