(通俗易懂 圖文並茂)算法入門之冒泡排序Python版

前言

這裏我們就直接簡單粗暴的給原理跟代碼看完之後在看一些比較官方的說明!!
如果開頭看不明白的先看 補充說明
如果只想看代碼的直接點目錄的 Python代碼 有兩種寫法。

什麼是冒泡排序

用自己的話講就是有一個數組,arr[i]arr[ i+1] 大,則它們交互位置,則否不交換。
什麼意思? 怎麼說? 看圖如下。

請忽略字醜·······

  • 圖中 p1 > p2 交換,並向後移一位。
  • p1 < p2 不交換,繼續向後移一位。
  • 這樣跑完一圈下來最大的數7被沉到末尾我們就排好一個數,
  • 接下來繼續這樣跑但是不用管 n-1 上的數了,就是已經排好的數就不用管了。
    在這裏插入圖片描述

下面再用一個比身高的例子。

在這裏插入圖片描述
紅色小人兒橙色小人兒 高 他們交換位置
在這裏插入圖片描述

在這裏插入圖片描述
紅色小人兒 比 黑色小人兒 高 則交換位置
在這裏插入圖片描述
在這裏插入圖片描述
紅色小人兒 沒有藍色小人兒 高 則不交換位置
在這裏插入圖片描述
藍色小人兒 紫色小人兒 高 交換位置
在這裏插入圖片描述
第一輪比較結束

在這裏插入圖片描述
前兩次比較位置不變 第三次交換位置
在這裏插入圖片描述
第二輪比較結束
在這裏插入圖片描述
第三輪比較 也位置不變
第四輪也是 有 n 個數就要比較 n-1

Python代碼

def bubble_sort(arr):
    n = len(arr)
 
    # 遍歷所有數組元素
    for i in range(n):
 
        for j in range(0, n-i-1):
 
            if arr[j] > arr[j+1] :
                arr[j], arr[j+1] = arr[j+1], arr[j]
 
arr = [3, 2, 0, 7, 4]
 
bubbleSort(arr)
 
print (arr)
def bubble_sort(arr):
    if arr is None and len(arr) < 2:
        return
    for end in range(len(arr) - 1, -1, -1):
        for i in range(end):
            if arr[i] > arr[i + 1]:
                arr[i],arr[i+1] = arr[i+1], arr[i]
    return arr


arr = [3, 2, 0, 7, 4]
 
bubble_sort(arr)
 
print (arr)
# 優化版
def bubble_sort(arr):
    if arr is None and len(arr) < 2:
        return
    for end in range(len(arr) - 1, -1, -1):
        exchange = False  # 設置哨兵
        for i in range(end):
            if arr[i] > arr[i + 1]:
                arr[i], arr[i + 1] = arr[i + 1], arr[i]
                exchange = True
        if not exchange:
            return arr
    return arr


arr = [3, 2, 0, 7, 4]

bubble_sort(arr)

print(arr)

補充說明

比較正式的說法如下。

冒泡排序(Bubble Sort)也是一種簡單直觀的排序算法。

  • 它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。
  • 走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。
  • 這個算法的名字由來是因爲越小的元素會經由交換慢慢"浮"到數列的頂端。

在這裏插入圖片描述

以上是從菜鳥教程借來的,但是說實話第一次接觸確實有點暈尤其是看完這個動圖之後更暈,所以我就去找了找別人的說法。

引用別人的說法。

汽水比喻

  • 喝汽水的時候,汽水中常常有許多小小的氣泡,嘩啦嘩啦飄到上面來。
  • 這是因爲組成小氣泡的二氧化碳比水要輕,所以小氣泡可以一點一點向上浮動。
  • 而我們的冒泡排序之所以叫做冒泡排序,正是因爲這種排序算法的每一個元素都可以像小氣泡一樣,根據自身大小,一點一點向着數組的一側移動。

上面的比喻還給我們科普了一下,看完這個比喻之後多少有點感覺了大概知道啥是冒泡排序了,然後我們在看看它的原理

原理

  • 比較相鄰的元素。如果第一個比第二個大,那它們交換,否則不交換。
  • 對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。這樣最後的元素就是最大的數。
  • 針對所有的元素重複以上的步驟,除了已經排過的最後一個元素。
  • 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章