Python實現氣泡排序,選擇排序,快速排序
阿新 • • 發佈:2018-12-01
- 氣泡排序
原理 : 氣泡排序(Bubble Sort)也是一種簡單直觀的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。
def bubble_sort(lst): # 外層迴圈控制比較多少輪 for i in range(1, len(lst)): # 內層迴圈控制元素的比較 for j in range(0, len(lst) - i): if lst[j] > lst[j + 1]: lst[j], lst[j + 1] = lst[j + 1], lst[j] return lst
- 選擇排序
原理 : 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘的未排序的元素中繼續尋找最小(大)元素,然後放到已排序的末尾。直到所有元素均排序完成。
# 選擇排序演算法 def sel_sort(lst): for i in range(len(lst) - 1): # 記錄最小數的索引 min_index = i for j in range(i + 1,len(lst)): if lst[j] < lst[min_index]: min_index = j # i不是最小數時將i和最小數交換位置 if i != min_index: lst[i],lst[min_index] = lst[min_index],lst[i] return lst
- 快速排序
原理 : 快速排序採用分治法,基本思想是選取陣列中一個數為基準數,一次排序過程中,將比基準數小的都放在它左邊,比基準數大的不動。然後經過一次排序,左邊部分都比基準數小,右邊都比基準數大,然後對左右兩邊分別進行同樣的排序(遞迴)。最後只直到剩下一個數字。
def qsort(lst): less = [] more = [] if not lst: return [] else: # 記錄第一個位置的值 picot = lst[0] for x in lst[1:]: if x < picot: less.append(x) else: more.append(x) return qsort(less) + [picot] + qsort(more)