McaT怎么读 2023-06-03 17:15 采纳率: 91.7%
浏览 19
已结题

c语言快速排序算法实现中数据莫名改变

刚学的快速排序于是自己试了试
但是遇到一个很奇怪的问题就是,数字小的能正常工作,数字大了(大概三位数开始)就会出错,更奇怪的是同样的样例多试几次之后又能正常工作了,我实在是找不着头脑
代码:

void exchange(int *a, int *b) {
    //交换两个整形数组元素
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}

void qsort(int *list, int len) {
    int position = -1;
    int flag = list[len - 1];
    if (len <= 1) {
        return;
    }
    for (int  i = 0; i < 5; i++) {
        if (list[i] <= flag) {
            position++;
            if (position != i) {
                exchange(list + position, list + i);
            } else {
                continue;
            }
        } else {
            continue;
        }
    }
    //递归
    qsort(list, position);//左
    qsort(list + position + 1, len - position - 1);//右
}

int main() {

    int list[5];
    while (1) {
        printf("\n输入:");
        for (int i = 0; i < 5; i++) {
            scanf("%d", &list[i]);
        }
        printf("排序后:\n");
        qsort(list, 5);

        for (int i = 0; i < 5; i++) {
            printf("%d ", list[i]);
        }

    }
    system("pause");
    return 0;
}

问题演示:

img

一两位数试了很多没出过错,但好像一旦出现三位数就可能发生这个问题
断点调试发现进入递归的时候有几率发生数组内容瞬间被修改,求解答!

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2023-06-03 21:01
    关注

    第15行:for (int i = 0; i < 5; i++) 应改为:for (int i = 0; i < len; i++)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月12日
  • 已采纳回答 6月4日
  • 创建了问题 6月3日

悬赏问题

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