Быстрая сортировка с использованием указателей си

Рейтинг: 0Ответов: 0Опубликовано: 02.02.2023
# 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;
}

Здравствуйте, подскажите пожалуйста, как реализовать сортировку Хоара с помощью указателей на си.

Ответы

Ответов пока нет.