冒泡排序算法(BubbleSort)

冒泡排序法只会操作两个相邻的元素,每次冒泡都会比较两个相邻的元素,看是否满足大小关系要求,如果不满足就互换位置。一次冒泡至少要让一个元素移动到它应该在的位置,重复n次就完成了n个元素的排序工作。

排序次数 数据 操作
初始状态 4 5 6 3 2 1 ---
第一次排序 4 5 6 3 2 1 不交换
4 5 6 3 2 1 不交换
4 5 6 3 2 1 交换
4 5 3 6 2 1 交换
4 5 3 2 6 1 交换
4 5 3 2 1 6 --
第二次排序 4 5 3 2 1 6 不交换
4 5 3 2 1 6 交换
4 3 5 2 1 6 交换
4 3 2 5 1 6 交换
4 3 2 1 5 6 --
... ... ...

因为有6个元素 所以最多执行6次排序就可以得到顺序的结果

排序次数 排序结果
初始状态 4 5 6 3 2 1
第1次排序 4 5 3 2 1 6
第2次排序 4 3 2 1 5 6
第3次排序 3 2 1 4 5 6
第4次排序 2 1 3 4 5 6
第5次排序 1 2 3 4 5 6
第6次排序 1 2 3 4 5 6

Java代码实现

public class BubbleSort {

    public static void main(String[] args) {
        int[] datalsit = {4,5,6,3,2,1};
        sort(datalsit);
        for(int i = 0; i < datalsit.length; i++){
            System.out.println(datalsit[i]);
        }
    }

    public static void sort(int[] datalist){
        for (int i = 0; i < datalist.length; i++){
            boolean flag = false; //循环退出标志位

            for (int j = 0; j < datalist.length - i -1; ++ j){
                if(datalist[j] > datalist[j + 1]){
                    int temp = datalist[j];
                    datalist[j] = datalist[j + 1];
                    datalist[j + 1] = temp;
                    flag = true;  //记录有数据交换
                }
            }

            if(!flag){
                break;   //没有数据交换 则证明有序,结束排序
            }
        }
    }
}

算法分析

  • 冒泡排序是一个原地排序
    冒泡排序过程只涉及相邻数据的交换操作,只需要常量级的临时空间,所以空间复杂度为O(1)
  • 冒泡排序是稳定的排序算法
    冒泡排序中,只有交换才能改变凉饿元素的前后顺序,为了保证冒泡排序算法的稳定性,当有相邻两个元素大小相等的时候,不做交换。所以相同大小数据排序前后顺序不变
  • 冒泡排序的时间复杂度
条件 示例 排序次数 时间复杂度
最好情况 1,2,3,4,5,6 1次冒泡 O(1)
最坏情况 6,5,4,3,2,1 6次冒泡 O(n2)

你可能感兴趣的:(冒泡排序算法(BubbleSort))