排序——冒泡排序

一、基本介绍

​ 冒泡排序是通过对待排序序列从前向后,依次比较相邻元素的值,如果逆序则交换顺序,使值大的元素移向后部。冒泡排序是一种稳定的算法,时间复杂度 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
            }
        }
    }
posted @ 2020-02-15 16:36  xhanglog  阅读(163)  评论(0编辑  收藏  举报