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

基于do-while循环实现的冒泡排序无法完全排序,求排查原因

冒泡排序代码问题分析与修复

你的代码无法完成完全排序的核心问题是flag的初始化位置错误:

当前代码里,flag = 0;被放在for循环内部,这意味着每遍历一个元素,flag都会被重置为0。哪怕这一轮遍历中前面已经发生过交换,只要最后一次元素比较没有交换,flag就会被设为0,导致do-while循环直接提前退出,此时数组还没完全排好序。

正确的做法是把flag = 0;移到do块的开头、for循环外面——每一轮遍历开始时先默认没有交换,只要这一轮里有任意一次交换操作,flag就会被设为1;只有当一整轮遍历下来完全没有交换时,才会退出循环,确保数组已经完全有序。

修复后的代码如下:

void bubbleSort(int lst[], int size)
{
    int flag; 
    do{
        flag = 0; // 每轮遍历开始时假设无交换
        for(int i = 0; i < size-1; i++) 
        {
            if(lst[i] > lst[i + 1])
            {
                // 交换元素
                int temp = lst[i]; 
                lst[i] = lst[i + 1];
                lst[i+1] = temp; 
                flag = 1; // 发生交换,标记flag
            }
        }
    }while (flag != 0); 
}

另外,你原代码里if判断外的int temp = lst[i];是多余的,可以直接删掉,不影响功能但能避免不必要的内存占用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:22:39