zoukankan      html  css  js  c++  java
  • 冒泡排序

    冒泡排序

    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)

  • 相关阅读:
    UDP 远程主机强迫关闭了一个现有连接
    CSS float 理解
    C# 启用事务提交多条带参数的SQL语句
    EF学习之DBFirst
    说一说JavaScript 中的原型ProtoType
    Unity
    Unity
    Unity
    Unity
    Godot
  • 原文地址:https://www.cnblogs.com/SimonZ/p/15517777.html
Copyright © 2011-2022 走看看