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 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化