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日