병합 정렬에서 임계 값을 이해할 수 없으며이를 어떻게 결정할 수 있습니까? 나는 google하지만 결과가 없습니다. 아무도 나를 위해 그것을 설명 할 수 있습니까? 삽입 정렬을 사용하여 임계 값 크로스 오버를 사용하는 경우 병합 정렬을 사용하여 [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)
대신 임계 값을 사용해야합니다. 이 주제에 대해 설명이 질문에