1
我想體驗快速排序的最壞情況。因此,我按降序生成一個數組。按快速排序進行排序後,數組的第一個元素有時變成垃圾,而有時變爲0。當第一元件成爲垃圾的所有元素的順序向上滑動,第二元素變成0,第三元件變爲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;
}
不要使用'做{...}而(j> i)個;' - 使在做任何事之前確定「我
我不明白爲什麼同樣的輸入在第二次運行後給出不同的輸出。 – InstantCrush
另一個問題是調用'quickSort()';它應該是 - 'quickSort(A,0,n-1);'因爲你正在使用'第一個和最後一個索引'。 –