1. 程式人生 > >python的排序演算法

python的排序演算法

選擇排序

選擇排序,搜尋整個列表,找到最小項的位置,如果該位置不是列表的第一個位置,也就是索引為零,演算法就會交換著兩個位置的項。然後,演算法回到第二個位置並且重複這個過程。

動圖

def selectionSort(alist):
    i = 0
    while i < len(alist):
        midIndex = i
        j = i +1
        # 搜尋整個列表,找到最小項的索引
        while j < len(alist):
            if alist[midIndex] > alist[j]:
                midIndex = j
            j +=1
        # 如果最小值不是第一項就交換位置
        if alist[i] != alist[midIndex]:
            alist[i],alist[midIndex] = alist[midIndex],alist[i]

        i += 1
    return alist

alist = [14,12,15,1,3,8,2,4,6]
print(selectionSort(alist))

控制檯輸出:

[1, 2, 3, 4, 6, 8, 12, 14, 15]

這裡函式包含了巢狀迴圈,對於大小為 n 的列表,外圍的迴圈 n-1 次。在第 1 次通過外圍迴圈的時候,內層迴圈執行 n-1次。在第 2 次通過外圍迴圈的時候,內層迴圈執行 n-2次。

氣泡排序

氣泡排序,從列表的開頭處開始,比較一對資料項,直到移動到列表的末尾。每當成對的兩項之間的位置不正確的時候,就交換他們的位置。 這個演算法的名字由來是因為越小的元素會經由交換慢慢“浮”到數列的頂端。

動圖

def bubbleSort(alist):
    n = len(alist)
    while n > 1:
        i = 1
        while i < n:
            if alist[i] < alist[i-1]:
                alist[i],alist[i-1] = alist[i-1],alist[i]
            i +=1
        n -= 1
    return alist

alist = [14,12,15,1,3,8,2,4,6]
print(bubbleSort(alist))

控制檯輸出:

[1, 2, 3, 4, 6, 8, 12, 14, 15]