这个快速排序代码有什么问题
what is wrong in this quick sort code
这个快速排序代码有什么问题我在某些输入情况下得到错误的输出:
#include<stdio.h>
void quick_sort(int A[], int start, int end) {
int pIndex;
if (start < end) {
pIndex=partion(A,start,end);
quick_sort(A,start,pIndex-1);
quick_sort(A,pIndex+1,end);
}
}
int partion(int A[], int start, int end) {
int i, temp, pIndex = start;
int pivot = A[end];
for (i = start; i < end; i++) {
if (A[i] <= pivot) {
temp = A[i];
A[i] = A[pIndex];
A[pIndex] = A[i];
pIndex++;
}
}
temp = A[pIndex];
A[pIndex] = A[end];
A[end] = temp;
return pIndex;
}
int main() {
int A[100], size, i;
scanf("%d\n", &size);
for (i = 0; i < size; i++) {
scanf("%d", &A[i]);
}
quick_sort(A, 0, size-1);
for (i = 0; i < size; i++) {
printf("%d\t", A[i]);
}
return 0;
}
我得到以下输入的错误输出:
Output
我应该怎么做才能按升序正确排序
您的意思是 A[pIndex]=A[i];
还是应该 A[pIndex]=temp;
- 这应该是交换操作。
这个快速排序代码有什么问题我在某些输入情况下得到错误的输出:
#include<stdio.h>
void quick_sort(int A[], int start, int end) {
int pIndex;
if (start < end) {
pIndex=partion(A,start,end);
quick_sort(A,start,pIndex-1);
quick_sort(A,pIndex+1,end);
}
}
int partion(int A[], int start, int end) {
int i, temp, pIndex = start;
int pivot = A[end];
for (i = start; i < end; i++) {
if (A[i] <= pivot) {
temp = A[i];
A[i] = A[pIndex];
A[pIndex] = A[i];
pIndex++;
}
}
temp = A[pIndex];
A[pIndex] = A[end];
A[end] = temp;
return pIndex;
}
int main() {
int A[100], size, i;
scanf("%d\n", &size);
for (i = 0; i < size; i++) {
scanf("%d", &A[i]);
}
quick_sort(A, 0, size-1);
for (i = 0; i < size; i++) {
printf("%d\t", A[i]);
}
return 0;
}
我得到以下输入的错误输出: Output
我应该怎么做才能按升序正确排序
您的意思是 A[pIndex]=A[i];
还是应该 A[pIndex]=temp;
- 这应该是交换操作。