天天看點

十大經典排序算法1(Python版本)

文章目錄

  • ​​一、排序算法與時間複雜度​​
  • ​​二、冒泡排序​​

一、排序算法與時間複雜度

1、十大排序算法

排序算法可以分為内部排序和外部排序,内部排序是資料記錄在記憶體中進行排序,而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要通路外存。常見的内部排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數排序等。用一張圖概括:

十大經典排序算法1(Python版本)

2、時間複雜度

  • 平方階 (O(n2)) 排序 各類簡單排序:直接插入、直接選擇和冒泡排序。
  • 線性對數階 (O(nlog2n)) 排序 快速排序、堆排序和歸并排序;
  • O(n1+§)) 排序,§ 是介于 0 和 1 之間的常數。希爾排序
  • 線性階 (O(n)) 排序 基數排序,此外還有桶、箱排序。

3、排序的穩定性

  • 排序後 2 個相等鍵值的順序和排序之前它們的順序相同
  • 穩定的排序算法:冒泡排序、插入排序、歸并排序和基數排序。
  • 不是穩定的排序算法:選擇排序、快速排序、希爾排序、堆排序。

4、名詞解釋

n:資料規模

k:“桶”的個數

In-place:占用常數記憶體,不占用額外記憶體

Out-place:占用額外記憶體

二、冒泡排序

1、冒泡介紹

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

作為最簡單的排序算法之一,冒泡排序就像 Abandon 在單詞書裡出現的感覺一樣,每次都在第一頁第一位,是以最熟悉。冒泡排序還有一種優化算法,就是立一個 flag,當在一趟序列周遊中元素沒有發生交換,則證明該序列已經有序。但這種改進對于提升性能來說并沒有什麼太大作用。

2、算法步驟

  • 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
  • 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。
  • 針對所有的元素重複以上的步驟,除了最後一個。
  • 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

3、動圖示範

十大經典排序算法1(Python版本)
def bubbleSort(arr):
    for i in range(1, len(arr)):  # 第一層周遊每個數字
        for j in range(0, len(arr)-i):  # 第二層用第一層選中的數字來和其他數字進行比較
            if arr[j] > arr[j+1]:  # 滿足條件,則交換順序
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
    return arr
a = [3,5,15,2,26,27,4,19,36,47,28,50,19,48,44]
bubbleSort(a)
print(a)      

繼續閱讀