什麼叫氣泡排序法?
相信有接觸過演算法的朋友多少都了解氣泡排序法,那麼什麼是氣泡排序法呢?氣泡排序,英文名稱(bubble sort)是一種基礎的交換排序演算法,在日常工作中經常會用到,例如:頁面資料需按時間先後排序,這本質上也是一種氣泡排序法。
喝過可樂的朋友都知道,可樂裡面的氣泡會向上浮,這就是氣泡排序一種最形象的例子。至於有些朋友問,是大的氣泡先上浮還是小的先上浮呢?這就取決於你的需求去做控制了。
先上**,再結合**介紹一下氣泡排序演算法的執行過程。
基礎版
def
bubble_sort
(list):
x = len(list)
# 這個迴圈負責設定氣泡排序進行的次數
for i in range(x - 1):
# 這個迴圈負責控制比較的元素個數
for j in range(0, x - 1 - i):
# 交換順序
if list[j] > list[j + 1]:
list[j], list[j + 1] = list[j +1], list[j]
return list
list = [3,1,2,4,5]
print(bubble_sort(list))
由 gif 圖結合**可以看出,就算當前數列中的某幾個元素之間是有序的(數列最後兩個元素 4 和 5 是不應該比較的),元素遍歷依然會執行,但這種操作是毫無意義的。這明顯會導致效率低下,以及資源消耗。在這種情況下氣泡排序演算法的時間複雜度是 o(n^2)
鑑於基礎版氣泡排序效率低下,改進版應運而生。
改進版在基礎版中已經知道就算當前數列中的某幾個元素之間是有序的(如最後的4、5),元素遍歷依然會執行。而我們改進版就是為了解決這個問題。
def
bubble_sort
(list):
x = len(list)
# 這個迴圈負責設定氣泡排序進行的次數
for i in range(x - 1):
# 有序標記,每一輪的初始是true,用於判斷元素間是否需要交換
issorted = true
# 這個迴圈負責控制比較的元素個數
for j in range(0, x - 1 - i):
# 交換順序
if list[j] > list[j + 1]:
list[j], list[j + 1] = list[j +1], list[j]
# 有交換行為設為 false
issorted = false
# 無交換行為(issorted = true),直接跳過本次迴圈
if issorted:
break
return list
list = [3,1,2,4,5]
print(bubble_sort(list))
上述**中加入了乙個標誌位 issorted ,利用布林變數 issorted 作為標記。如果在本輪排序中,元素有交換,則說明數列無序;如果沒有元素交換,說明數列已然有序,直接跳出大迴圈。 如何優化氣泡排序?
比較相鄰兩個元素,如果第乙個比第二個大,則交換兩個元素 從左到右依次比較,直到最大數字於陣列尾端 重複n 1次1 2步驟,除去已經排序的最大數 依次將第二,第三。第n 1大的數排好位置。原序列396 5827 4第1趟36 5827 49 第2趟356 2748 9第3趟35 264789 第4趟3...
氣泡排序以及如何優化氣泡排序
氣泡排序的基本思想是 通過對待排序序列從前往後 從下標較小的元素開始 依次比較相鄰元素的值,若發現逆序則交換,使值較大的元素逐漸從前移向後部,就像水底下的泡泡一樣逐漸向上冒。測試八萬個資料進行排序,使用優化後的 大致需要20秒 如下 public static void bubblesort int...
優化氣泡排序(python)
記錄交換操作發生的位置,如果沒有發生交換操作,則代表排序已經可以終止 這樣一來氣泡排序最好的情況下,時間複雜度就從o n 2 優化到了o n def imroved bubble sort l length len l swaplast length 1for i in range len l si...