【发布时间】:2017-09-21 16:19:44
【问题描述】:
void QuickSort(int* x, int first, int last) {
if (first >= last)
;
else {
int pivotindex = Partition(x, first, last);
QuickSort(x, first, pivotindex - 1);
QuickSort(x, pivotindex + 1, last);
}
}
int Partition(int* x, int first, int last) {
int isbig = first + 1, issmall = last, tmp;
while (1) {
while (x[isbig++] < x[first] && isbig != last + 1); //
while (x[issmall--] > x[first] && issmall != first); //
if (isbig < issmall) { // tmp = x[issmall];
x[issmall] = x[isbig];
x[isbig] = tmp;
}
else { // tmp = x[first];
x[first] = x[issmall];
x[issmall] = tmp;
break; //
}
}
return issmall; //
}
我对这段代码有疑问。我自己编码。 它正在工作。但是这件事比我做的归并排序算法要慢。 我找不到问题所在。 (我知道归并排序和快速排序的时间复杂度在非排序数据上是相等的,但在 10,000 个数据排序上:time comparison ignore korean)
它比归并排序大 10 倍。我认为这意味着代码很糟糕。 但我找不到它在哪里。 代码中是否有任何不好的部分导致时间复杂度变大?
【问题讨论】:
-
您似乎已经注释掉了两个关键行? (或者是代码格式错误?)
-
代码使用
tmp,但从不设置它。 -
大家感谢您回答我的问题。我找到原因了。 Actully 我是排序排序arry。但我认为这是非排序的。这意味着结果时间是最坏情况时间。