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

    一、基本介绍

    ​ 冒泡排序是通过对待排序序列从前向后,依次比较相邻元素的值,如果逆序则交换顺序,使值大的元素移向后部。冒泡排序是一种稳定的算法,时间复杂度 O(n2)。

    二、排序过程

    对数组 [10 , 20 , 13 , 8 ] 的排序过程如下:

    1. 第一趟排序
     - 第一次排序:10和20比较大小,10小于20,不交换位置 ,[10 , 20 , 13 , 8]
     - 第二次排序:20和13比较大小,20大于13,交换20和13的位置,[10 , 13, 20 , 8]
     - 第三次排序:20和8比较大小,20大于8,交换20和8的位置,[10 , 13 , 8 , 20]
    2. 第二趟排序
     - 第一次排序:10和13比较大小,10小于13,不交换位置 ,[10 , 13 , 8 , 20]
     - 第二次排序:13和8比较大小,13大于8,交换13和8的位置,[10 , 8 , 13 , 20]
    3. 第三趟排序
     - 第一次排序:10和8比较大小,10大于8,交换10和8的位置 ,[8 , 10 , 13 , 20]
    

    这个时候数组变排好序了。可以看出,当数组中的元素个数为 m 时,需要进行 m-1 趟排序,每趟排序中,需要进行 (m-趟数) 次。

    三、代码实现

    • 在实现过程中,设置一个标识,当一个序列已经有序时,后面就不需要在进行遍历了,此时便可以直接跳出循环。
    public static void bubbleSort(int[] arr) {
            if (arr == null || arr.length < 2 ){
                return;
            }
            int temp = 0;//定义一个临时变量
            boolean flag = false;//设置一个标识判断是否已经有序
            for (int i = 0; i < arr.length - 1; i++) {
                for (int j = 0; j < arr.length - i - 1; j++) {
                    if (arr[j] > arr[j + 1]) {
                        temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                        flag = true;//有交换,还不是有序的,置为true
                    }
                }
                if (!flag) {
                    break;//后续的序列有序,跳出循环
                } else {
                    flag = false;//将标志重新置为false
                }
            }
        }
    
  • 相关阅读:
    质量属性论文
    四月份-读书笔记 构建之法
    基于二元模型的拼音输入法
    融云单聊
    Gogs私有git仓库 + Drone构建CI/CD
    仿jq ajax封装支付宝小程序request.js
    Electron 和 Angular 构建桌面应用程序
    css多行溢出省略号
    package-lock和package.json
    控制窗体的小程序
  • 原文地址:https://www.cnblogs.com/Mhang/p/12312553.html
Copyright © 2011-2022 走看看