2302_79644694 2024-03-02 16:19 采纳率: 42.9%
浏览 3
已结题

c语言会快速排序找错


#include <stdio.h>

void sort(int a[10],int i,int j)
{
    if(i>=j) return;

    int f;
    f=a[i];
    //i++;

    while(i<j)
    {
        while(a[j]>=f&&i<j)
            j--;
        while(a[i]<=f&&i<j)
            i++;


        int t;
        t=a[i];
        a[i]=a[j];
        a[j]=t;
    }
    int t;
    t=a[j];
    a[j]=a[0];
    a[0]=t;

    sort(a,0,i-1);
    sort(a,i+1,9);

}

int main()
{
    int a[10];

    for(int i=0;i<10;i++)
    scanf("%d",&a[i]);

    sort(a,0,9);

    for(int i=0;i<10;i++)
        printf("%d ",a[i]);
}

谁能帮我找一下错在哪里

  • 写回答

4条回答 默认 最新

  • 关注

    2302_79644694 下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    在快速排序函数中,你有几个不正确的地方:

    1. 在交换元素时,你没有处理当i=j时的情况。当i=j时,说明只剩下一个元素,不需要再进行交换。

    2. 在交换元素时,你将a[j]与a[0]进行交换。这是不正确的,应该是将a[j]与a[i]进行交换。

    3. 在递归调用排序函数时,你传递的参数不正确。应该是sort(a,0,i-1)和sort(a,i+1,j),而不是sort(a,0,i-1)和sort(a,i+1,9)。因为数组的大小是10,所以应该传递索引的上界j,而不是具体的数值9。

    修改后的正确代码如下所示:

    #include <stdio.h>
    
    void sort(int a[10], int i, int j) {
        if (i >= j) return;
    
        int f = a[i];
        int start = i, end = j;
    
        while (i < j) {
            while (a[j] >= f && i < j)
                j--;
            while (a[i] <= f && i < j)
                i++;
    
            if (i < j) {
                int t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
        }
    
        int t = a[j];
        a[j] = a[start];
        a[start] = t;
    
        sort(a, start, i - 1);
        sort(a, i + 1, end);
    }
    
    int main() {
        int a[10];
    
        for (int i = 0; i < 10; i++)
            scanf("%d", &a[i]);
    
        sort(a, 0, 9);
    
        for (int i = 0; i < 10; i++)
            printf("%d ", a[i]);
    
        return 0;
    }
    

    希望对你有所帮助!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月10日
  • 已采纳回答 3月2日
  • 创建了问题 3月2日

悬赏问题

  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 易优eyoucms关于二级栏目调用的问题
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题