冒泡排序(Bubble Sort)也是一種簡單直觀的排序算法。它重複地走訪過要排序的數列,一次比較兩個元素,若是他們的順序錯誤就把他們交換過來。走訪數列的工做是重複地進行直到沒有再須要交換,也就是說該數列已經排序完成。這個算法的名字由來是由於越小的元素會經由交換慢慢"浮"到數列的頂端。python
做爲最簡單的排序算法之一,冒泡排序給個人感受就像 Abandon 在單詞書裏出現的感受同樣,每次都在第一頁第一位,因此最熟悉。冒泡排序還有一種優化算法,就是立一個 flag,當在一趟序列遍歷中元素沒有發生交換,則證實該序列已經有序。算法
對每一對相鄰元素做一樣的工做,從開始第一對到結尾的最後一對。這步作完後,最後的元素會是最大的數。針對全部的元素重複以上的步驟,除了最後一個。持續每次對愈來愈少的元素重複上面的步驟,直到沒有任何一對數字須要比較。優化
當輸入的數據已是正序時(都已是正序了,我還要你冒泡排序有何用啊)。spa
當輸入的數據是反序時(寫一個 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))
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 }