经典排序算法(一)--- 冒泡排序

冒泡排序

冒泡排序(Bubble Sort)是一种简单直观的排序算法。它重复地遍历要排序的数组,依次比较两个相邻的元素大小,如果第一个比第二个大,就交换他们两个。

算法原理
  • 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  • 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
  • 针对所有的元素重复以上的步骤,除了最后一个。
  • 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
复杂度及稳定性
平均时间复杂度 最优时间复杂度 最坏时间复杂度 空间复杂度 稳定性
O(N^2) O(N) O(N^2) O(1) 稳定
动画演示

在这里插入图片描述

视频演示

舞动的排序算法之冒泡排序

代码实现
  1. python

    def bubble_sort(_list):
        for i in range(len(_list)-1):
            for j in range(0, len(_list)-1 - i):
                if _list[j] > _list[j+1]:
                    _list[j], _list[j + 1] = _list[j + 1], _list[j]
        return _list
    
    print(bubble_sort([2, 4,3,10,9, 1, 8, 5, 5]))
    # [1, 2, 3, 4, 5, 5, 8, 9, 10]
    
  2. java

    static int[] bubbleSort(int[] listData) {
        for (int i = 0; i < listData.length; i++) {
            for (int j = 0; j < listData.length - 1 - i; j++) {
                int temp = listData[j];
                if (listData[j] > listData[j + 1]) {
                    listData[j] = listData[j + 1];
                    listData[j + 1] = temp;
                }
            }
        }
        return listData;
    }
    // 查看输出
    public static void main(String[] args) {
        int[] test = bubbleSort(new int[]{2, 4,3,10,9, 1, 8, 5, 5});
        for (int i: test) {
            System.out.println(i);
        }
    }
    
算法优化

冒泡排序还有一种优化算法,就是立一个 flag,当在一趟序列遍历中元素没有发生交换,则证明该序列已经有序。

  1. python

    def bubble_sort(_list):
    	flag = True
        for i in range(len(_list)-1):  
            for j in range(0, len(_list)-1 - i):
                if _list[j] > _list[j+1]:
                    flag = False
                    _list[j], _list[j + 1] = _list[j + 1], _list[j]
            if flag:
                break
        return _list
        
    print(bubble_sort([2, 4,3,10,9, 1, 8, 5, 5]))
    # [1, 2, 3, 4, 5, 5, 8, 9, 10]
    
  2. java

    static int[] bubbleSort(int[] listData) {
    	boolean flag = true;
        for (int i = 0; i < listData.length; i++) {
            for (int j = 0; j < listData.length - 1 - i; j++) {
                int temp = listData[j];
                if (listData[j] > listData[j + 1]) {
                    flag = false;
                    listData[j] = listData[j + 1];
                    listData[j + 1] = temp;
                }
            }
            if (flag){
                break;
            }
        }
        return listData;
    }
    // 查看输出
    public static void main(String[] args) {
        int[] test = bubbleSort(new int[]{2, 4,3,10,9, 1, 8, 5, 5});
        for (int i: test) {
            System.out.println(i);
        }
    }	
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章