Быстрая сортировка с использованием указателей си
# include <stdio.h>
# include <stdlib.h>
# include <time.h>
void QuickSort(int *a, int size){
int *left = a; // Адрес 1 элемента
int *right = a + (size - 1); // Адрес 2 элемента
int *pivot = a + (size / 2); // Адрес разделителя
printf("\n");
printf("pivot %d, l - %d, r - %d\n", *pivot, *left, *right);
do{
while(*left < *pivot) ++left; // Разыменовываем, сравниваем значения и сдвигаем указатель
while(*right > *pivot) --right;
if(left <= right) { // Меняем местами
int temp = *left;
*left = *right;
*right = temp;
++left;
--right;
}
} while(left <= right); // Обходим весь массив
if(a < right) QuickSort(a, right - a);
if(left < a + (size - 1)) QuickSort(left, (a + (size - 1)) - left);
}
int main(){
int b[] = {2,4,67,23,86,34,5,1, 55, 12, 13};
int *c = b;
int s = sizeof(b)/sizeof(b[0]);
QuickSort(c, s);
for(int *p = b; p < b + sizeof(b)/sizeof(b[0]); p++){
printf(" %d", *p);
}
printf("\n");
return 0;
}
Здравствуйте, подскажите пожалуйста, как реализовать сортировку Хоара с помощью указателей на си.
Источник: Stack Overflow на русском