lil_SV

Untitled

Sep 24th, 2021
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.43 KB | None | 0 0
  1. // Это самый оптимальный способ поменять значения переменных
  2. // Функция не будет использовать лишние переменные
  3. void swap(int *a,int *b){ // меняем значение переменных местами с помощью XOR
  4.     *a^=*b;
  5.     *b^=*a;
  6.     *a^=*b;
  7. }
  8.  
  9.  
  10. // Это самая охуенная сортировка в твоей жизни!!!
  11. // Реализания быстрой сортировки на чистых указателях,
  12. // а значит что эта сортировка не будет использовать слишком много памяти,
  13. // при этом работая как советская промышленость в 1945
  14. void sort(int *begin,int *end){ // begin - указатель на первый элемент массива, end - указатель на элемент, идущий за последним элементом массива
  15.     const int size=end-begin; // размер массива
  16.     if(size==1){ // размер 1, нечего сортировать
  17.         return;
  18.     }
  19.     if(size==2){ // если размер равен 2
  20.         if(*begin>*(end-1)){ // если первый элемент строго больше второго
  21.             swap(begin,end-1); // меняем их местами
  22.         }
  23.         return;
  24.     }
  25.     int x=*(begin+size/2); // опорный элемент
  26.     int *i=begin; // первый элемент массива
  27.     int *j=end-1; // последний элемент массива
  28.     do{
  29.         while(*i<x){ // пока значение i элемента массива меньше опорного, игнорируем
  30.             i++; //
  31.         }
  32.         while(*j>x){ // пока значение j элемента массива строго больше опорного, игнорируем
  33.             j--; //
  34.         }
  35.         if(i-begin<j-begin){ // если i не меньше j
  36.             swap(i,j); // меняем значения местами
  37.         }
  38.     }while(i!=j); // пока i и j не встретились
  39.     if(i-begin>0){ // если левый массив не пуст
  40.         sort(begin,i+1); // сортируем массив
  41.     }
  42.     if(end-j>1){ // если правый массив не пуст
  43.         sort(j,end); // сортируем массив
  44.     }
  45. }
Add Comment
Please, Sign In to add comment