jaclsohu 2023-08-29 00:09 采纳率: 37.5%
浏览 5
已结题

快速排序,请问为什么无法实现从小到大排序呢


#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;
}
  • 写回答

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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月6日
  • 已采纳回答 8月29日
  • 创建了问题 8月29日