1. 程式人生 > >Python實現冒泡、選擇、插入、快速排序

Python實現冒泡、選擇、插入、快速排序

ble style lec election 實現 class code quick i+1

1. 冒泡排序

# 冒泡排序
# 需比較len(seq)-1輪。每輪在下標0到len(seq)-i-1的數中,每一個數與它後面一個數比較,大數後移(冒泡),每輪中最大的數冒泡排到本輪最後
def bubble_sort(seq):
    seq = copy.deepcopy(seq1
    for i in range(len(seq)-1):
        for j in range(len(seq)-i-1):
            if seq[j] > seq[j+1]:  # 相鄰兩數比較,大數後移
                seq[j], seq[j+1] = seq[j+1], seq[j]
    
return seq

2. 選擇排序

# 選擇排序
# 需比較len(seq)-1輪。下標0到i的數已排好序,下標i的數與後面的數分別比較,選擇出最小的數給seq[i]
def selection_sort(seq):for i in range(len(seq)-1):
        for j in range(i+1, len(seq)):
            if seq[i] > seq[j]:
                seq[i], seq[j] = seq[j], seq[i]
    return seq

3. 插入排序

# 插入排序
# 需比較len(seq)-1輪。下標0到i的數已排好序,下標i的數(val)與前面的每個數(從後往前)比較,並插入到比它大的數前面
def insert_sort(seq):for i in range(1, len(seq)):
        val = seq[i]
        idx = i
        while val < seq[idx-1] and idx > 0:
            seq[idx], seq[idx-1] = seq[idx-1], val
            idx -= 1
    return
seq

4. 快速排序

# 快速排序1(用遞歸函數實現)
def quick_sort(seq):if len(seq) <= 1:
        return seq
    return quick_sort([s for s in seq[1:] if s < seq[0]]) + seq[0:1] + quick_sort([m for m in seq[1:] if m >= seq[0]])

# 快速排序2(用匿名函數實現)
qsort = lambda seq:         seq if len(seq) <= 1 else qsort(
                                      [item for item in seq[1:] if item <= seq[0]])                                       + [seq[0]]                                       + qsort([item for item in seq[1:] if item > seq[0]]
                                  )

Python實現冒泡、選擇、插入、快速排序