#include <stdio.h>
int Partional(int A[],int low,int high){
int pivot = A[low];
while (low <high)
{
while (low<high && A[high]>=pivot)
{
--high;
}
A[low] = A[high];
while (low<high && A[low]<=pivot)
{
++low;
}
A[high]=A[low];
}
A[low]=pivot;
return low;
}
//快速排序
void QuickSort(int A[],int low,int high){
if(high<low){ //递归跳出条件
int pivotpops=Partional(A,low,high);
QuickSort(A,low,pivotpops-1); //划分左子表
QuickSort(A,pivotpops+1,high); //划分右子表
}
}
void See(int A[],int n){
for(int i =0;i<n;i++){
printf("a[%d] = %d\n",i,A[i]);
}
}
int main(){
int A[10] = {1,3,4,2,3,5,8,2,3};
int low = 0;
int high = 9;
QuickSort(A,low,high);
See(A,10);
return 0;
}
快速排序,请问为什么无法实现从小到大排序呢
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
qzjhjxj 2023-08-29 09:58关注代码的问题在 void QuickSort(int A[],int low,int high) 函数里,第 25 行 if(high<low) //递归跳出条件 错误了,应该修改为: if(high > low) ,修改如下,供参考:
#include <stdio.h> int Partional(int A[], int low, int high) { int pivot = A[low]; while (low < high) { while (low < high && A[high] >= pivot) { --high; } A[low] = A[high]; while (low < high && A[low] <= pivot) { ++low; } A[high] = A[low]; } A[low] = pivot; return low; } //快速排序 void QuickSort(int A[], int low, int high) { if (high > low) { // if(high < low) 递归跳出条件错误,修改 int pivotpops = Partional(A, low, high); QuickSort(A,low, pivotpops - 1); //划分左子表 QuickSort(A, pivotpops + 1, high); //划分右子表 } } void See(int A[], int n) { for (int i = 0; i < n; i++) { printf("a[%d] = %d\n", i, A[i]); } } int main() { int A[10] = { 1,3,4,2,3,5,8,2,3 }; int low = 0; int high = 9; QuickSort(A, low, high); See(A, 10); return 0; }本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报