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);'因为你正在使用'第一个和最后一个索引'。 –