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)有沒有不好的代碼? (C上的快速排序時間複雜度)
它比歸併排序的10倍。我認爲這意味着代碼不好。 但我找不到它在哪裏。 有什麼不好的代碼會使時間複雜性變得更糟嗎?
您似乎已經評論了兩條關鍵線? (或者代碼格式不正確?) –
代碼使用'tmp',但從不設置它。 – chux
夥計們感謝您回覆我的問題。我找到原因。實際上我是排序分類的。但我認爲這是沒有排序的。這意味着結果時間是最差的時間。 –