美文网首页
冒泡算法及优化方案

冒泡算法及优化方案

作者: 小丸子的呆地 | 来源:发表于2021-07-23 06:50 被阅读0次

冒泡算法,就是比较两个相邻的元素的大小,根据比较结果进行交换,一直比较到最后一个元素,此时经过一轮比较交换,最后一个元素应该为最大或者最小值。然后再次比较一轮,这次只比较到倒数第二个元素,如此往复,一直比较到第一个元素。

常规写法

    public void maopao1(int[]arr){
        for (int i = arr.length - 1; i >= 0; i--) {
            for (int j = 1; j <= i; j++) {
                if (arr[j - 1] > arr[j]) {
                    int temp = arr[j];
                    arr[j] = arr[j - 1];
                    arr[j - 1] = temp;
                }
            }
        }
    }

优化写法1

记录当前轮次的比较是否发生过交换,如果没有发生交换表示已经有序,不再继续排序;

    public void maopao2(int[]arr){
        boolean swaped = true;
        for (int i = 0; i < arr.length; i++) {
            if(!swaped){
                break;
            }
            swaped = false;
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j +1] < arr[j]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                    swaped = true;
                }
            }
        }
    }

一边比较一边向后两两交换,将最大值 / 最小值冒泡到最后一位;
经过优化的写法:

优化写法3

除了使用变量记录当前轮次是否发生交换外,再使用一个变量记录上次发生交换的位置,下一轮排序时到达上次交换的位置就停止比较。

    public void maopao3(int[]arr){
        boolean swaped = true;
        int swapedIndex = -1;
        int lastSwapedIndex = arr.length - 1;
        for (int i = 0; i < arr.length; i++) {
            if(!swaped){
                break;
            }
            swaped = false;
            for (int j = 0; j < lastSwapedIndex; j++) {
                if (arr[j + 1] < arr[j]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                    swaped = true;
                    swapedIndex = j;
                }
            }
            lastSwapedIndex = swapedIndex;

        }
    }

相关文章

  • 冒泡算法及优化方案

    冒泡算法,就是比较两个相邻的元素的大小,根据比较结果进行交换,一直比较到最后一个元素,此时经过一轮比较交换,最后一...

  • 冒泡算法

    一、常用冒泡算法 二、优化冒泡算法

  • 经典排序算法总结

    经典排序算法集锦 冒泡法 排序算法入门之冒泡排序 排序算法入门之冒泡排序优化

  • 算法-冒泡排序及优化

    冒泡算法的原理: 升序冒泡:两次循环,相邻元素两两比较,如果前面的大于后面的就交换位置 降序冒泡:两次循环,相邻元...

  • 常见算法1-冒泡及优化

    冒泡算法: (对一些部分有序的数组,效率高)时间复杂度:n^2;一般入门时是这样写的: 得道结果是12346;没问...

  • 音视频开发之旅(23) 算法系列 - 冒泡排序

    目录 主流排序算法 stl中sort的实现 冒泡算法 优化点 资料 收获 Stl中算法组件是Function te...

  • 基础算法

    二分查找 冒泡排序(优化) 归并排序 动态规划算法

  • 冒泡与选择排序

    优化版冒泡排序 选择排序 数据交换常用三种算法对比

  • iOS冒泡算法优化

    前言 关于数组排序的问题,在之前的文章有很详细的介绍(链接:《iOS面试之道》算法基础学习(下))。在这篇文章中,...

  • 算法:优化冒泡排序

    之前我们已经聊过 冒泡排序 ,但是当我们的元素列表中如果存在了一批已经排好序的数据,冒泡排序还是会坚挺的执行下去。...

网友评论

      本文标题:冒泡算法及优化方案

      本文链接:https://www.haomeiwen.com/subject/wjjymltx.html