我的冒泡排序算法为何输出重复值?求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]完全没被修改。这就相当于把后一个元素直接替换成了前一个元素的值,自然会产生大量重复。
正确的交换逻辑应该是:
- 用临时变量
t保存numarr[k]的值 - 将
numarr[k+1]的值赋值给numarr[k] - 把
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
相关产品推荐
相关产品推荐

