2013-04-30 4 views
-1

병합 정렬에서 임계 값을 이해할 수 없으며이를 어떻게 결정할 수 있습니까? 나는 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) 대신 임계 값을 사용해야합니다. 이 주제에 대해 설명이 질문에

답변

0

봐가 : N 삽입 정렬로 정렬되지 않은 왼쪽 정렬 병합 실행 한 후, 우리는 전환 요소가있는 경우 Why should Insertion Sort be used after threshold crossover in Merge Sort

기본적으로, 임계 값은 숫자 n은 그와 같은 것입니다. n은 꽤 모호합니다. 코드에서 테스트하여 어느 부분이 성능을 최적화하는지 확인할 수 있습니다. 따라서 여러 값을 시험해보고 성능을 테스트하지 않으면 임계 값을 결정할 방법이 없습니다.

은 BTW 당신의 거대한되지 않을 경우 문

if(hl < 50) 

과 똑같은?

관련 문제