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倍です。コードが悪いということだと思います。 しかし、どこにあるのかわかりません。 時間の複雑さを大きくするコードの悪い部分はありますか?
あなたは2つの重要な行をコメントアウトしているように見えますか? (または、コードはひどくフォーマットされていますか?) –
コードは 'tmp'を使用しますが、決して設定しません。 – chux
ご質問ありがとうございます。私は理由を見つける。 Actully私はソートされた並べ替えだった。しかし、私はそれがソートされていないアリーであると思う。つまり、結果の時間は最悪の時間です。 –