1. 程式人生 > >Python實現氣泡排序,選擇排序,快速排序

Python實現氣泡排序,選擇排序,快速排序

  1. 氣泡排序

原理 : 氣泡排序(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
  1. 選擇排序

原理 : 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘的未排序的元素中繼續尋找最小(大)元素,然後放到已排序的末尾。直到所有元素均排序完成。

# 選擇排序演算法
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
  1. 快速排序

原理 : 快速排序採用分治法,基本思想是選取陣列中一個數為基準數,一次排序過程中,將比基準數小的都放在它左邊,比基準數大的不動。然後經過一次排序,左邊部分都比基準數小,右邊都比基準數大,然後對左右兩邊分別進行同樣的排序(遞迴)。最後只直到剩下一個數字。

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)