我的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