You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

我的冒泡排序算法为何输出重复值?求C语言技术解答

冒泡排序输出重复值的问题排查与修复

你的问题出在交换元素的代码逻辑错误,导致不仅没完成正确交换,还覆盖了原本的元素值,最终出现大量重复输出。

看你冒泡排序里的交换代码:

t = numarr[k]; numarr[k + 1] = numarr[k]; numarr[k + 1] = t;

这里的错误很明显:你把numarr[k]赋值给numarr[k+1]之后,又把临时变量t(也就是原来的numarr[k])再次赋值给numarr[k+1],等于numarr[k+1]最终还是numarr[k]的值,而numarr[k]完全没被修改。这就相当于把后一个元素直接替换成了前一个元素的值,自然会产生大量重复。

正确的交换逻辑应该是:

  1. 用临时变量t保存numarr[k]的值
  2. 将numarr[k+1]的值赋值给numarr[k]
  3. 把t的值赋值给numarr[k+1]

修正后的BubbleSort函数代码如下:

void BubbleSort(int numarr[]) {
    int j, k, t;
    for (j = 20; j > 1; j--) {
        for (k = 0; k < j - 1; k++) {
            if (numarr[k] > numarr[k + 1]) {
                t = numarr[k]; 
                numarr[k] = numarr[k + 1]; // 补上这一步关键的赋值
                numarr[k + 1] = t;
            }            
        }
    }
}

运行修正后的代码,输出就会是正确的排序结果:

2
3
5
7
11
12
13
17
19
23
24
29
31
36
37
41
43
52
68
84

另外提个小建议:你可以把数组长度改成动态获取(比如用sizeof(numarr)/sizeof(numarr[0])),这样以后修改数组元素数量时不用手动改循环条件,更灵活。

内容的提问来源于stack exchange,提问作者Rachit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 00:25:24