Python—冒泡排序算法

冒泡排序

一,介紹

  冒泡排序(Bubble Sort)也是一種簡單直觀的排序算法。它重複地走訪過要排序的數列,一次比較兩個元素,若是他們的順序錯誤就把他們交換過來。走訪數列的工做是重複地進行直到沒有再須要交換,也就是說該數列已經排序完成。這個算法的名字由來是由於越小的元素會經由交換慢慢"浮"到數列的頂端。python

  做爲最簡單的排序算法之一,冒泡排序給個人感受就像 Abandon 在單詞書裏出現的感受同樣,每次都在第一頁第一位,因此最熟悉。冒泡排序還有一種優化算法,就是立一個 flag,當在一趟序列遍歷中元素沒有發生交換,則證實該序列已經有序。算法

二,算法步驟

  對每一對相鄰元素做一樣的工做,從開始第一對到結尾的最後一對。這步作完後,最後的元素會是最大的數。針對全部的元素重複以上的步驟,除了最後一個。持續每次對愈來愈少的元素重複上面的步驟,直到沒有任何一對數字須要比較。優化

三,相關問題

  1. 何時最快

  當輸入的數據已是正序時(都已是正序了,我還要你冒泡排序有何用啊)spa

  2. 何時最慢

  當輸入的數據是反序時(寫一個 for 循環反序輸出數據不就好了,幹嗎要用你冒泡排序呢)。code

四,代碼實現

python版本blog

# 冒泡排序,時間複雜度O(n²)
def bubble_sort(num):
    """
    若是冒泡排序中的一次排序沒有發生交換,則說明列表已經有序,能夠直接結束算法
    :param num:
    :return:
    """
    for i in range(len(num) - 1):
        exchange = False
        print(num)
        for j in range(len(num) - 1 - i):
            if num[j] > num[j + 1]:
                num[j], num[j + 1] = num[j + 1], num[j]
                exchange = True
        if not exchange:
            return num
    return num


l = [33, 11, 12, 1, 2, 3, 4, 5, 22]
print(bubble_sort(l))

JavaScript版本

function bubbleSort(arr) {
    var len = arr.length;
    for (var i = 0; i < len - 1; i++) {
        for (var j = 0; j < len - 1 - i; j++) {
            if (arr[j] > arr[j+1]) {        // 相鄰元素兩兩對比
                var temp = arr[j+1];        // 元素交換
                arr[j+1] = arr[j];
                arr[j] = temp;
            }
        }
    }
    return arr;
}

Golang版本
排序

func bubbleSort(arr []int) []int {
        length := len(arr)
        for i := 0; i < length; i++ {
                for j := 0; j < length-1-i; j++ {
                        if arr[j] > arr[j+1] {
                                arr[j], arr[j+1] = arr[j+1], arr[j]
                        }
                }
        }
        return arr
}
相關文章
相關標籤/搜索