关于冒泡排序的小优化

  今天在看代码的时候,看到一段之前老同事写的冒泡排序代码;发现在内层for排序交换位置的时候,通过增加标识符flag=true/false;可以提前在完成排序的时候,终止循环,避免不必要的排序浪费。记录下来,不是为了说这点小东西还大张旗鼓的写一个小文章,希望自己在这里能学到所谓优化就是精益求精。

 

  

点击查看代码
public static void main(String[] args) {
        int [] array = {1,2,4,3,4,6,4,9,34,22,4};
        //用于优化循环次数,当十个元素,正常需要冒泡九次,但是如果数组在冒泡第五次的时候顺序就已经是从小到大排序好了,后面的循环就多余了
        boolean flag = true;
        //相邻元素交换,存储交换值
        int val = 0;
        //记录交换次数
        int count = 0;
        for(int i=0;i<array.length-1; i++) {
            //-i-i: 每冒泡一次,都会确定一次最大的元素,放在最后一位,所以每次内循环就可以减少一次循环次数
            for(int j=0;j<array.length-1-i;j++) {
                flag = false;

                if(array[j]>array[j+1]) {        //冒泡
                    val = array[j];
                    array[j] = array[j+1];
                    array[j+1] = val;

                    flag = true; //记录是否交换元素,如果没有交换,则退出循环
                }
            }

            if(flag==false) {
                System.out.println("排序结束");
                break;
            }
            count++;
            //輸出每次排序結果
            System.out.println(Arrays.toString(array));
        }

        System.out.println(Arrays.toString(array));
        System.out.println("冒泡次数:"+count);
    }
posted @   conghe  阅读(105)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
点击右上角即可分享
微信分享提示