• 冒泡排序


    冒泡排序

    img

    步骤

    比较相邻的两个元素,如果后一个元素比前一个元素大,那么就交换两个元素,把大的放在后面。

    对每一对相邻元素都做比较,这样一趟下来,最大的元素就放在最后了。

    除了最后有序的部分,对剩下的元素持续上述步骤,直到没有任何一对元素需要比较交换,排序结束。

    还有一个优化点,就是如果这一趟下来,没有发生任何交换,那么说明数组已经有序了,没必要再对剩下元素再做比较了。因此可以设置一个flag,判断是否需要继续比较。

    Java代码

    public void sort(int[] arr) {
        if (null == arr || arr.length < 2) {
            return;
        }
    
        for (int j = 1; j < arr.length; j++) {
            boolean flag = true;
            for (int i = 0; i < arr.length - j; i++) { // 一趟冒泡,把最大的数放在最后
                if (arr[i] > arr[i + 1]) {
                    this.exchange(arr, i, i + 1);
                    flag = false;// 标识发生了交换
                }
            }
            if (flag) { // 全程无交换
                break;
            }
        }
    }
    

    优点

    对于数组和链表,都可以用冒泡排序。因为冒泡排序是比较和交换相邻两个元素,这对链表和数组都是可行的。

    冒泡排序是稳定的,也就是比较两个相邻元素相等,是不交换他们的位置的,两个元素的相对顺序不改变。

    时间复杂度

    最好O(n)

    最差O(n^2)

  • 相关阅读:
    金牙与肉屑
    科学研究的动机以及雄心
    适度的自我吹嘘
    ubuntu12启用root账户
    有很多文件夹是受系统保护的
    vs2012换肤功能,vs2012主题及自定义主题
    Ubuntu navicat for mysql 安装和使用
    Asp.Net MVC4 Bundle捆绑压缩技术
    64位Windows Jmail组件报错解决方案
    C#检测上传文件的真实类型
  • 原文地址:https://www.cnblogs.com/SimonZ/p/15517777.html
Copyright © 2020-2023  润新知