'''
冒泡排序原理: 每一趟只能將一個數歸位, 如果有n個數進行排序,只需將n-1個數歸位, 也就是說要進行n-1趟操作(已經歸位的數不用再比較),每一次都是得到比較列表中最大的數。
排列順序:從大到小,從右向左排,右邊的數最大,
'''
def bubble_sort(seq):
for i in range(len(seq)-1): #每一趟只能將一個數據歸位,所以需要有 len(seq)-1 次循環比較。每一次歸位的數爲列表中最大的數。
for j in range(len(seq)-i-1): #每一次循環有 len(seq)-i-1 次比較。
if seq[j] > seq[j+1]: #將相鄰的兩個數進行比較
seq[j], seq[j+1] = seq[j+1], seq[j] #把數值小的放前面,數值大的放後面.
return seq
'''
選擇排序:(每次得到最小值)
選擇排序比較好理解,好像是在一堆大小不一的球中進行選擇(以從小到大,先選最小球爲例):
1. 選擇一個基準球
2. 將基準球和餘下的球進行一一比較,如果比基準球小,則進行交換
3. 第一輪過後獲得最小的球
4. 在挑一個基準球,執行相同的動作得到次小的球
5. 繼續執行4,直到排序好
'''
def selected_sort(seq):
'''
index: 下標,用於記錄列表中最小值的一個索引值
i: 下標,用於記錄列表中位於第一個數的下標
'''
for i in range(len(seq)-1):
index = i
for j in range(i+1,len(seq)):
if seq[index] > seq[j]:
index = j
seq[i], seq[index] = seq[index], seq[i]
return seq
'''
快速排序
'''
# 使用遞歸
def quick_sort(seq):
if seq == []:
return []
else:
pivot = seq[0]
lesser = quick_sort([x for x in seq[1:] if x < pivot])
greater = quick_sort([x for x in seq[1:] if x >= pivot])
return lesser + [pivot] + greater
'''
二分查找法:遞歸方法
'''
def binary_chop(alist, data):
n = len(alist)
if n < 1:
return False
mid = n // 2
if alist[mid] > data:
# Python 中的切片 alist[0:mid] 從0開始,到mid,但是不包括mid
return binary_chop(alist[0:mid], data)
elif alist[mid] < data:
return binary_chop(alist[mid+1:], data)
else:
return True