Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static class Quicksort
- {
- public static void SortInline(int[] arr)
- {
- Inline(arr, 0, arr.Length - 1);
- }
- private static void Inline(int[] arr, int left, int right)
- {
- if (left >= right) return;
- int pivot = arr[left];
- int leftPoint = left - 1;
- int pIndex = right + 1;
- int temp;
- while (true)
- {
- do { pIndex--; } while (arr[pIndex] > pivot);
- do { leftPoint++; } while (arr[leftPoint] < pivot);
- if (leftPoint < pIndex)
- {
- temp = arr[leftPoint];
- arr[leftPoint] = arr[pIndex];
- arr[pIndex] = temp;
- }
- else { break; }
- }
- Inline( arr, left, pIndex);
- Inline( arr, pIndex + 1, right);
- }
- public static void SortNonInline(int[] arr)
- {
- NonInline(arr, 0, arr.Length - 1);
- }
- private static void NonInline(int[] arr, int left, int right)
- {
- if (left >= right) return;
- var pIndex = Partition(arr, left, right);
- NonInline(arr, left, pIndex);
- NonInline(arr, pIndex + 1, right);
- }
- private static int Partition(int[] arr, int left, int right)
- {
- int pivot = arr[left];
- int leftPoint = left - 1;
- int pIndex = right + 1;
- int temp;
- while (true)
- {
- do { pIndex--; } while (arr[pIndex] > pivot);
- do { leftPoint++; } while (arr[leftPoint] < pivot);
- if (leftPoint < pIndex)
- {
- temp = arr[leftPoint];
- arr[leftPoint] = arr[pIndex];
- arr[pIndex] = temp;
- }
- else { break; }
- }
- return pIndex;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment