Guest User

Untitled

a guest
Mar 4th, 2012
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.02 KB | None | 0 0
  1.     public static class Quicksort
  2.     {
  3.         public static void SortInline(int[] arr)
  4.         {
  5.             Inline(arr, 0, arr.Length - 1);
  6.         }
  7.  
  8.         private static void Inline(int[] arr, int left, int right)
  9.         {
  10.             if (left >= right) return;
  11.  
  12.             int pivot = arr[left];
  13.             int leftPoint = left - 1;
  14.             int pIndex = right + 1;
  15.             int temp;
  16.  
  17.             while (true)
  18.             {
  19.                 do { pIndex--; } while (arr[pIndex] > pivot);
  20.                 do { leftPoint++; } while (arr[leftPoint] < pivot);
  21.  
  22.                 if (leftPoint < pIndex)
  23.                 {
  24.                     temp = arr[leftPoint];
  25.                     arr[leftPoint] = arr[pIndex];
  26.                     arr[pIndex] = temp;
  27.                 }
  28.                 else { break; }
  29.             }
  30.  
  31.             Inline( arr, left, pIndex);
  32.             Inline( arr, pIndex + 1, right);
  33.         }
  34.  
  35.         public static void SortNonInline(int[] arr)
  36.         {
  37.             NonInline(arr, 0, arr.Length - 1);
  38.         }
  39.  
  40.         private static void NonInline(int[] arr, int left, int right)
  41.         {
  42.             if (left >= right) return;
  43.  
  44.             var pIndex = Partition(arr, left, right);
  45.             NonInline(arr, left, pIndex);
  46.             NonInline(arr, pIndex + 1, right);
  47.         }
  48.  
  49.         private static int Partition(int[] arr, int left, int right)
  50.         {
  51.             int pivot = arr[left];
  52.             int leftPoint = left - 1;
  53.             int pIndex = right + 1;
  54.             int temp;
  55.  
  56.             while (true)
  57.             {
  58.                 do { pIndex--; } while (arr[pIndex] > pivot);
  59.                 do { leftPoint++; } while (arr[leftPoint] < pivot);
  60.  
  61.                 if (leftPoint < pIndex)
  62.                 {
  63.                     temp = arr[leftPoint];
  64.                     arr[leftPoint] = arr[pIndex];
  65.                     arr[pIndex] = temp;
  66.                 }
  67.                 else { break; }
  68.             }
  69.             return pIndex;
  70.         }
  71.     }
Advertisement
Add Comment
Please, Sign In to add comment