Advertisement
Guest User

merge

a guest
May 14th, 2012
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.86 KB | None | 0 0
  1.  public void threaded_merge_sort(int[] getallen, int p, int r, int depthRemaining)
  2. {
  3.     if (p < r)
  4.     {
  5.                 int q = (p + r) / 2;
  6.  
  7.                 if (depthRemaining > 0)
  8.                 {
  9.                     Parallel.Invoke(
  10.                         () => threaded_merge_sort(getallen, p, q, depthRemaining-1)/*,
  11.                         () => threaded_merge_sort(getallen, q + 1, r, depthRemaining-1)*/);
  12.                     threaded_merge_sort(getallen, q + 1, r, 0);
  13.                 }
  14.                 else
  15.                 {
  16.                     threaded_merge_sort(getallen, p, q, 0);
  17.                     threaded_merge_sort(getallen, q+1, r, 0);
  18.                 }
  19.  
  20.                 merge(getallen, p, q, r);
  21.     }
  22. }
  23.  
  24. public void merge(int[] getallen, int p, int q, int r)
  25. {
  26.             int n1 = q - p + 1;
  27.             int n2 = r - q;
  28.             int[] left = new int[n1];
  29.             int[] right = new int[n2];
  30.  
  31.             for (int i = 0; i < n1; i++)
  32.                 left[i] = getallen[p + i];
  33.             for (int i = 0; i < n2; i++)
  34.                 right[i] = getallen[q + 1 + i];
  35.  
  36.             int leftCounter = 0;
  37.             int rightCounter = 0;
  38.  
  39.             for (int k = p; k <= r; k++)
  40.             {
  41.                 if (left.Length > leftCounter && right.Length > rightCounter)
  42.                 {
  43.                     if (left[leftCounter] <= right[rightCounter])
  44.                         getallen[k] = left[leftCounter++];              
  45.                     else
  46.                         getallen[k] = right[rightCounter++];            
  47.                 }
  48.              
  49.                 else if (left.Length > leftCounter)
  50.                     getallen[k] = left[leftCounter++];                
  51.                 else if (right.Length > rightCounter)
  52.                     getallen[k] = right[rightCounter++];              
  53.             }
  54.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement