Я уже искал информацию для алгоритма быстрой сортировки. Но я все еще не могу понять это на C. Я пытаюсь, но функция Quicksort не работает вообще. Я не могу найти ошибки в моем коде. Пожалуйста, помогите мне понять, что происходит.Реализация алгоритма быстрой сортировки
#include <stdio.h>
#include <stdlib.h>
void swap(int a, int b)
{
int temp = 0;
temp = a;
a = b;
b = temp;
}
int Partition(int p , int r, int A[r - p + 1])
{
int j = 0;
int x = A[r - 1];
int i = p - 1;
for(j = p - 1; j < r - 1; j++) {
if(A[j] <= x) {
i = i + 1;
swap(A[i], A[j]);
}
}
swap(A[i], A[r - 1]);
return i + 1;
}
void Quicksort(int p, int r, int A[r - p + 1])
{
int q = 0;
if((p - 1) < (r - 1)) {
q = Partition(p ,r , A);
Quicksort(p, q - 1, A);
Quicksort(q + 1, r, A);
}
}
int main(int argc, char *argv[])
{
int A[] = {10, 5, 1, 3, 9, 2, 4, 8, 7, 6};
int i = 0;
int length = sizeof(A)/sizeof(int);
Quicksort(1, length , A);
for(i = 0; i < length; i ++) {
printf("%d ", A[i]);
}
printf("\n");
return 0;
}
Ну, вы активизировали через код в отладчике? – OldProgrammer
Ваша функция 'swap()' ничего не сделает. Он заменит содержимое своих локальных копий и вернется. Данные, которые вы его назвали ('A [i], A [j]' и т. Д.), Не будут изменены. Рассмотрим либо передачу (и получение) * указателей * на целые числа, либо реализацию 'swap()' в качестве макроса. –
Фактически, я этого не сделал. Наверное, я сейчас попробую. – AndreyCHu