#include<stdio.h> void Swap(int *a,int *b) { int m = *a; *a = *b; *b = m; } int Median3(int A[], int Left, int Right) { int Center=(Left+Right)/2; if (A[Left] > A[Center]) Swap(&A[Left], &A[Center]); if (A[Left] > A[Right]) Swap(&A[Left], &A[Right]); if (A[Center] > A[Right]) Swap(&A[Center], &A[Right]); Swap(&A[Center],&A[Right-1]); return A[Right-1]; } void Quicksort(int A[], int Left, int Right) { if (Left >= Right) return; // 增加判断语句 int Pivot = Median3( A, Left, Right), i = Left, j = Right-1; for( ; ; ) { while(A[++i] < Pivot){ } while(A[--j] > Pivot){ } if(i<j) Swap(&A[i],&A[j]); else break; } Swap(&A[i],&A[Right-1]); Quicksort(A,Left,i-1); Quicksort(A,i+1,Right); } int main() { int a[10],i; for(i=0;i<10;i++) { scanf("%d",&a[i]); } Quicksort(a,0,9); for(i=0;i<10;i++) { printf("%d ",a[i]); } } 排序不正确,输入0 1 2 3 4 5 6 7 8 9,输出0 1 3 2 4 6 5 7 9 8 是为什么?
时间: 2024-01-20 07:02:39 浏览: 73
学习C语言必会的7组代码基础代码学习.rar
根据代码和输入输出结果,可以看出快速排序的过程出现了问题,导致输出的结果不是正确的排序结果。具体原因是在 Median3 函数中,交换的元素不是正确的,导致了排序出现错误。解决方法是在交换元素时,将基准元素 Pivot 与 A[Right-1] 进行交换,而不是 A[Center] 与 A[Right-1] 进行交换。修改后的 Median3 函数如下:
```c
int Median3(int A[], int Left, int Right) {
int Center = (Left + Right) / 2;
if (A[Left] > A[Center])
Swap(&A[Left], &A[Center]);
if (A[Left] > A[Right])
Swap(&A[Left], &A[Right]);
if (A[Center] > A[Right])
Swap(&A[Center], &A[Right]);
Swap(&A[Center], &A[Right - 1]);
return A[Right - 1];
}
```
修改后,快速排序的输出结果将是正确的排序结果。
阅读全文