ZiGGi

quicksort

Mar 4th, 2013
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.16 KB | None | 0 0
  1. #include <iostream>
  2. #include <string.h>
  3.  
  4. template<class T>
  5. void quickSort(T* a, long N)
  6. {
  7.     long i = 0, j = N;
  8.     // выбор опорного элемента
  9.     T p = a[N >> 1];
  10.    
  11.     do {
  12.         // поиск элемента для переноса в старшую часть
  13.         while (a[i] < p) {
  14.             i++;
  15.         }
  16.         // поиск элемента для переноса в младшую часть
  17.         while (a[j] > p) {
  18.             j--;
  19.         }
  20.        
  21.         if (i <= j) {
  22.             std::swap(a[i], a[j]);
  23.             i++;
  24.             j--;
  25.         }
  26.     } while (i <= j);
  27.    
  28.     // рекурсивное упорядочивание подмассивов, лежащих слева и справа от опорного элемента.
  29.     if (j > 0) {
  30.         quickSort(a, j);
  31.     }
  32.     if (i < N) {
  33.         quickSort(a+i, N-i);
  34.     }
  35. }
  36.  
  37. int main()
  38. {
  39.     setlocale(LC_ALL, "Russian");
  40.    
  41.     char str[] = "бвгдеекувалв";
  42.     quickSort(str, strlen(str)-1);
  43.     std::cout << str << std::endl;
  44.    
  45.     int a[] = {2, 5, 101, 20, 8, 0, 9, 12, 11, 10, 36, 3, 4};
  46.     quickSort(a, sizeof(a) / sizeof(a[0]) - 1);
  47.     for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++) {
  48.         std::cout << a[i] << " ";
  49.     }
  50.    
  51.     std::cout << std::endl;
  52.     return 0;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment