クイックソートの最悪のケースを経験したい。したがって、降順で配列を生成します。クイックソートでソートした後、配列の最初の要素がガベージになることがありますが、時には期待通りに0になることもあります。最初の要素は、すべての要素の順序がアップスライドゴミになると、2番目の要素は0になると、第3の要素は1などとなり ここに私のコード:ホーアのパーティションスキーム使用クイックソートの出力が一貫しない
void generateDescendingArray(int *arr, int n) {
for(int i = n - 1; i >= 0; i--) {
arr[n-i-1] = i;
}
}
void quickSort(int *A, int start, int end) {
if(end > start) {
int s = partition(A, start, end); //split position
quickSort(A, start, s - 1); //sort before the split
quickSort(A, s + 1, end); //sort after the split
}
}
int partition(int *A, int start, int end) {
int pivot = A[start];
int i = start;
int j = end + 1;
do {
do { i++;
} while(pivot > A[i]);
do { j--;
} while(pivot < A[j]);
swap(&A[i], &A[j]);
} while(j > i);
swap(&A[i], &A[j]); //undo last swap when i >= j
swap(&A[start], &A[j]);
return j;
}
int main() {
int A[n];
generateDescendingArray(A, n);
quickSort(A, 0, n);
return 0;
}
を;' - 作ります何かをする前に 'i
2回目の実行後に同じ入力が異なる出力を与える理由はわかりません。 – InstantCrush
もう一つの問題は 'quickSort()'の呼び出しです。最初の索引と最後の索引を使用しているので、 'quickSort(A、0、n-1); 'でなければなりません。 –