【发布时间】:2012-10-28 18:51:24
【问题描述】:
我的快速排序有问题。对于某些值,它有效,但对于其他值则无效。例如,当第一个值小于最后一个值时,它不起作用。我不知道出了什么问题。这是代码:
#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;
}
【问题讨论】:
-
您的
Partition()方法可疑。您将枢轴设置为r+1元素(记住数组从0 开始),并从p迭代到rexclusive。这通常表示一个错误,但不熟悉的变量名称(为什么不使用英文?这几乎是惯例......)使其很难遵循。 -
所以 r 是最后一个元素,p 是表中的第一个元素
-
好的,我知道你现在在那里做了什么,第二次看起来还不错。不过,最好将变量名翻译成英文 - 每个人都更容易理解,而且您可能会得到更好的答案。
-
我把我的代码翻译成英文名字