Advertisement
Rayzven

qsort

Feb 12th, 2020
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.37 KB | None | 0 0
  1. void qsortRecursive(int *mas, int size) {
  2.     //Указатели в начало и в конец массива
  3.     int i = 0;
  4.     int j = size - 1;
  5.  
  6.     //Центральный элемент массива
  7.     int mid = mas[size / 2];
  8.  
  9.     //Делим массив
  10.     do {
  11.         //Пробегаем элементы, ищем те, которые нужно перекинуть в другую часть
  12.         //В левой части массива пропускаем(оставляем на месте) элементы, которые меньше центрального
  13.         while(mas[i] < mid) {
  14.             i++;
  15.         }
  16.         //В правой части пропускаем элементы, которые больше центрального
  17.         while(mas[j] > mid) {
  18.             j--;
  19.         }
  20.  
  21.         //Меняем элементы местами
  22.         if (i <= j) {
  23.             int tmp = mas[i];
  24.             mas[i] = mas[j];
  25.             mas[j] = tmp;
  26.  
  27.             i++;
  28.             j--;
  29.         }
  30.     } while (i <= j);
  31.  
  32.  
  33.     //Рекурсивные вызовы, если осталось, что сортировать
  34.     if(j > 0) {
  35.         //"Левый кусок"
  36.         qsortRecursive(mas, j + 1);
  37.     }
  38.     if (i < size) {
  39.         //"Првый кусок"
  40.         qsortRecursive(&mas[i], size - i);
  41.     }
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement