我的Quicksort出现问题。对于某些值,它可以工作,但对于其他值则不适用。例如,当第一个值小于最后一个时,它不起作用。我不知道什么是错的。这是代码:快速排序每次不排序
#include <stdio.h>
#include <time.h>
#define lenght_max 1000000
int x;
int tablica[lenght_max];
int q;
int Partition(left, right) {
int tmp;
int i;
int j;
i = -1;
j = 0;
x = tablica[right];
i = left - 1;
for(j = left; j < right; j++){
if(tablica[j] <= x) {
i++;
tmp = tablica[i];
tablica[i] = tablica[j];
tablica[j] = tmp;
}
}
return i + 1;
}
void Quicksort(left, right) {
if(left < right){
q = Partition(left, right);
Quicksort(left , q - 1);
Quicksort(q + 1, right);
}
}
int main(void) {
int i;
int temporary;
int left;
int right;
printf("Witaj uzytkowniku. To jest program preferujacy sortowanie szybkie - quicksort.\n");
printf("Podaj, ile liczb chcialbys posortowac: ");
scanf("%i", &temporary);
printf("Podaj liczby do sortowania: \n");
for(i = 0; i < temporary; i++)
scanf("%d", &tablica[i]);
left = 0;
right = temporary - 1;
x = temporary/2;
Quicksort(left, right);
printf("\nPROCES:\n");
for(i = 0; i < temporary; i++)
printf("%d\n", tablica[i]);
return 0;
}
您的'分区()'方法是可疑的。您将主轴设置为'r + 1'元素(记住数组从0开始),并且从'p'迭代到'r' *独占*。这通常表示一个错误,但不熟悉的变量名称(为什么不使用英语?这几乎是惯例......)使其很难遵循。 – amit
所以r是最后一个元素,p是表 – henio180
中的第一个元素好吧,我看到你现在在那里做了什么,从第二次看起来似乎很好。尽管如此,更好地将变量名称翻译为英语 - 每个人都可以更轻松地遵循,并且您可能会得到更好的答案。 – amit