Advertisement
las4

Sort Algorithms

Apr 26th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.43 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void quickSort(int *numbers, int left, int right);
  6. int lomutoPartition(int *numbers, int left, int right);
  7. int hoarePartition(int *numbers, int left, int right);
  8.  
  9. void insertionSort(int *numbers, int length);
  10.  
  11. void swapNumbers(int *a, int *b);
  12.  
  13. int main() {
  14.     int length;
  15.     cin >> length;
  16.  
  17.     while (length != 0) {
  18.         int *numbers = new int[length];
  19.         for (int i = 0; i < length; i++)
  20.             cin >> numbers[i];
  21.  
  22.         quickSort(numbers, 0, length - 1);
  23.         for (int i = 0; i < length; i++)
  24.             cout << numbers[i] << " " << flush;
  25.  
  26.         delete [] numbers;
  27.         cout << endl;
  28.         cin >> length;
  29.     }
  30. }
  31.  
  32. void quickSort(int *numbers, int left, int right) {
  33.     if (left < right) {
  34.         int pivot = hoarePartition(numbers, left, right);
  35.         quickSort(numbers, left, pivot - 1);
  36.         quickSort(numbers, pivot + 1, right);
  37.     }
  38. }
  39.  
  40. int lomutoPartition(int *numbers, int left, int right) {
  41.     int pivot = numbers[left];
  42.     int newPivotPos = left;
  43.  
  44.     for (int i = left; i <= right; i++) {
  45.         if (numbers[i] < pivot) {
  46.             newPivotPos++;
  47.             swapNumbers(&(numbers[newPivotPos]), &(numbers[i]));
  48.         }
  49.     }
  50.  
  51.     swapNumbers(&(numbers[left]), &(numbers[newPivotPos]));
  52.     return newPivotPos;
  53. }
  54.  
  55. int hoarePartition(int *numbers, int left, int right) {
  56.     int pivot = numbers[left];
  57.     int leftCounter = left;
  58.     int rightCounter = right + 1;
  59.  
  60.     do {
  61.         do {
  62.             leftCounter++;
  63.         } while (leftCounter < right && numbers[leftCounter] < pivot);
  64.  
  65.         do {
  66.             rightCounter--;
  67.         } while (numbers[rightCounter] > pivot);
  68.  
  69.         swapNumbers(&(numbers[leftCounter]), &(numbers[rightCounter]));
  70.     } while (leftCounter < rightCounter);
  71.  
  72.     swapNumbers(&(numbers[leftCounter]), &(numbers[rightCounter]));
  73.     swapNumbers(&(numbers[left]), &(numbers[rightCounter]));
  74.  
  75.     return rightCounter;
  76. }
  77.  
  78. void insertionSort(int *numbers, int length) {
  79.     int lastSortedPos = 0;
  80.     for (int i = 1; i < length; i++, lastSortedPos++) {
  81.         int number = numbers[i];
  82.         int counter = lastSortedPos;
  83.         while (counter >= 0 && numbers[counter] > numbers[i])
  84.             numbers[counter + 1] = numbers[counter--];
  85.  
  86.         nummbers[counter + 1] = number;
  87.     }
  88. }
  89.  
  90. void swapNumbers(int *a, int *b) {
  91.     int aux = *a;
  92.     *a = *b;
  93.     *b = aux;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement