EncountersAgain 2022-02-06 16:43 采纳率: 66.7%
浏览 108
已结题

C语言递归实现快速排序,希望大家帮我改一下bug,然后写一下出现bug的具体原因,细一点,谢啦

#include <stdio.h>
#include <time.h>
#define N 100
void Swap(int *p, int *q);
int Median3(int A[], int Left, int Right);
void QuickSort(int A[],int Left, int Right);
void Println(int A[], int Len);
int main() {
int A[N] = {0};
int i, len;//
printf("请输入数组长度:\n");
scanf("%d",&len);// printf("请输入数组元素:\n");
for(i = 0; i < len; i++) { scanf("%d",&A[i]); }
QuickSort(A,0,len-1);
Println(A,len); return 0;}
void Swap(int *p, int *q) { int temp = *p; *p = *q; *q = temp; }
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) { int Pivot, Low = 0, High = 0;
Pivot = Median3(A, Left, Right); Low = Left, High = Right-1;
while(1) {while(A[++Low] < Pivot); while(A[--High] > Pivot);
if(Low < High)
Swap(&A[Low],&A[High]);
else break; }
Swap(&A[Low],&A[Right-1]);
QuickSort(A, Left, Low-1);
QuickSort(A, Low+1, Right);}
void Println(int A[], int Len) {
int i = 0; for(i = 0; i < Len; i++) {
printf("%d ",A[i]);//
if(i != Len-1)// printf(" ");//注意IO流问题; }}

  • 写回答

2条回答 默认 最新

  • 广大菜鸟 2022-02-06 20:41
    关注

    QuickSort 没有考虑left>=right情况

    #include<stdlib.h>
    #include <stdio.h>
    #include <time.h>
    #define N 100
    void Swap(int *p, int *q);
    int Median3(int A[], int Left, int Right);
    void QuickSort(int A[], int Left, int Right);
    void Println(int A[], int Len);
    int main()
    {
        int A[] = {4, 3, 2, 1, 6, 8};
        int i, len; //
        len = sizeof(A)/sizeof(int);
        // printf("请输入数组长度:\n");
        // scanf("%d", &len); // printf("请输入数组元素:\n");
        // for (i = 0; i < len; i++)
        // {
        //     scanf("%d", &A[i]);
        // }
        QuickSort(A, 0, len - 1);
        Println(A, len);
        system("pause");
    }
    void Swap(int *p, int *q)
    {
        int temp = *p;
        *p = *q;
        *q = temp;
    }
    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, Low = 0, High = 0;
        Pivot = Median3(A, Left, Right);
        Low = Left, High = Right;
        while (Low<High){
            while(A[++Low] < Pivot);
            while (A[--High] > Pivot);      
            if (Low < High)
                Swap(&A[Low], &A[High]);       
        }
        QuickSort(A, Left, High);
        QuickSort(A, High+1, Right);
    }
    void Println(int A[], int Len)
    {
        int i = 0;
        for (i = 0; i < Len; i++)
        {
            printf("%d ", A[i]); 
            if (i != Len - 1)    
                printf(" ");//注意IO流问题;
        }
    }
    /*
    6
    4 3 2 1 6 8
    */
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月15日
  • 已采纳回答 2月7日
  • 创建了问题 2月6日

悬赏问题

  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。