python的排序演算法
阿新 • • 發佈:2018-12-13
選擇排序
選擇排序,搜尋整個列表,找到最小項的位置,如果該位置不是列表的第一個位置,也就是索引為零,演算法就會交換著兩個位置的項。然後,演算法回到第二個位置並且重複這個過程。
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]