虾饺爱下棋 2023-02-08 14:46 采纳率: 100%
浏览 46
已结题

C语言算法——快速排序

问题遇到的现象和发生背景

快速排序的算法题

遇到的现象和发生背景,请写出第一个错误信息
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
#include <stdio.h>
#include <malloc.h>
void quicksort(int letf, int right,int* a);
int  n;
int main(void)
{
    int i, j;
    scanf("%d", &n);
    int* a = (int*)malloc(sizeof(int) * n);
    for (i = 1; i <= n; i++)
        scanf("%d", &a[i]);
    quicksort(1, n,a);

    for (i = 1; i <= n; i++)
        printf("%d ", a[i]);
    return 0;
}
void quicksort(int left, int right,int* a)
{
    int i, j, t, temp;
    if (left > right)
        return;
    temp = a[left];
    i = left;
    j = right;
    while (i != j)
    {
        while (a[j] >= temp && i < j)
            j--;
        while (a[i] <= temp && i < j)
            i++;
        if (i < j)
        {
            t = a[i];
            a[i] = a[j];
            a[j] = t;
        }
    }
    a[left] = a[i];
    a[i] = temp;

    quicksort(left, i - 1,a);
    quicksort(i + 1, right,a);
    return;
}

运行结果及详细报错内容

结果显示时间超出,不太明白,有什么好的改法吗?

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”
  • 写回答

2条回答 默认 最新

  • Huazie 全栈领域优质创作者 2023-02-08 15:27
    关注
    • 数组索引操作,还是得从 0开始
    • 在你基础上改了一下,参考代码如下:
    #include <stdio.h>
    #include <malloc.h>
    void quicksort(int letf, int right,int* a);
    
    int main(void)
    {
        int i, n = 10;
        scanf("%d", &n);
        int a[n];
        for (i = 0; i < n; i++)
            scanf("%d", &a[i]);
        quicksort(0, n-1, a);
     
        for (i = 0; i < n; i++)
            printf("%d ", a[i]);
        return 0;
    }
    void quicksort(int left, int right,int* a)
    {
        int i, j, t, temp;
        if (left > right)
            return;
        temp = a[left];
        i = left;
        j = right;
        while (i < j)
        {
            while (a[j] >= temp && i < j)
                j--; // 从右向左找第一个小于temp的数
            if (i < j) {
                a[i++] = a[j]; // 将小于temp的值放在左边
            }
            while (a[i] <= temp && i < j)
                i++; // 从左向右找第一个大于temp的数
            if (i < j) {
                a[j--] = a[i]; // 将大于temp的值放在右边
            }
        }
        
        a[i] = temp;
     
        quicksort(left, i - 1,a);
        quicksort(i + 1, right,a);
        return;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Linux权限管理相关操作(求解答)
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表
  • ¥15 DbVisualizer Pro 12.0.7 sql commander光标错位 显示位置与实际不符
  • ¥15 android 打包报错
  • ¥15 关于stm32的问题
  • ¥15 ncode振动疲劳分析中,noisefloor如何影响PSD函数?