排序算法:交换排序之冒泡排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BLUE5945/article/details/81270609

介绍

1.冒泡排序同样属于交换排序
2.冒泡排序的基本思路为:
比较相邻元素的大小,如果元素大于(小于也行,看你要从大到小,还是从paixun小到大)下一个元素,则交换,然后比较下一个元素和下下一个元素,这样一次的冒泡排序就会使一个最大值(最小值)排在顶端,如果总共有n个元素,那么只需n-1次(这个可以优化,待会会讲)这样的冒泡排序就可以将所有元素排序

分析

下面我以简单的[1, 4, 2, 8, 5, 3]为例,画图解释一下
这里写图片描述

代码

public static void bubbleSort(int[] arr) {
        int len = arr.length;
        for(int i = 0; i < len - 1; i++) {
            // 设置一个标识位,当一次排序没有交换时,即数组所有元素的顺序已经是正确的了,这就是之前说的优化
            boolean flag = false;
            // 一次循环,选出最大的一个元素
            for(int j = 0; j < len - i - 1; j++) {
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                    flag = true;
                }
            }
            // 当没有交换时,直接结束循环
            if(!flag) {
                break;
            }
        }
    }

算法分析

1.时间复杂度为 O ( n 2 ) O(n^2)
2.空间复杂度为 O ( 1 ) O(1)
3.由于在每一次排序时,除了最大或者最小的元素位置变了之外,其他元素的相对位置不会发生变化,因此冒泡排序呢是一种稳定的排序算法

猜你喜欢

转载自blog.csdn.net/BLUE5945/article/details/81270609