1滚粟、直接插入排序
def insert_sort(seq_list):
if not seq_list:
return None
seq_list_len = len(seq_list)
if seq_list_len < 2:
return seq_list
# 認(rèn)為第一個(gè)是有序
for i in range(1, seq_list_len):
key = seq_list[i] # 帶排序的數(shù)
j = i - 1
while j >= 0 and seq_list[j] > key:
seq_list[j+1] = seq_list[j]
j -= 1
seq_list[j+1] = key
return seq_list
if __name__ == '__main__':
import random
my_list = range(10)
random.shuffle(my_list)
# [1, 4, 8, 9, 7, 2, 5, 6, 0, 3]
print insert_sort(my_list)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2憎亚、冒泡排序
def bubble_sort(seq_list):
i = len(seq_list)
print i
while i > 1:
max = seq_list[0] # 每次選第一個(gè)作為最大值
for j in range(i):
if seq_list[j] < max: # 如果遇到比最大值小的匆浙,交換位置安寺,大的往上冒
seq_list[j], seq_list[j-1] = seq_list[j-1], seq_list[j]
max = seq_list[j]
if seq_list[j] > max:
max = seq_list[j]
i -= 1
return seq_list
if __name__ == '__main__':
import random
my_list = range(100)
random.shuffle(my_list)
print bubble_sort(my_list)
3、選擇排序
def select_sort(seq_list):
seq_list_len = len(seq_list)
i = 0
while i < seq_list_len:
item = min(seq_list[i:]) # 用了min來求一個(gè)列表的最小值
j = seq_list[i:].index(item) + i # 使用index求下標(biāo),應(yīng)該求剩下未排序列表中元素的下標(biāo)首尼,絕對下標(biāo)要加上i
seq_list[i], seq_list[j] = item, seq_list[i] # 最小值放在未排序數(shù)組的第一個(gè)位置挑庶,第一個(gè)位置數(shù)放在存放最小值的位置
i += 1
return seq_list
if __name__ == '__main__':
import random
my_list = range(100)
random.shuffle(my_list)
print select_sort(my_list)
4、快排
def quick_sort(seq_list):
if not seq_list:
return seq_list
else:
pivot = seq_list[0] # 將列表的第一個(gè)元素定位軸
small = quick_sort([x for x in seq_list[1:] if x < pivot]) # 比軸小的放一邊软能,比軸大的放一邊迎捺,然后遞歸對左子表進(jìn)行快速排序,右子表進(jìn)行快速排序
big = quick_sort([x for x in seq_list[1:] if x >= pivot]) # 這里因?yàn)榈谝粋€(gè)作為軸查排,所以從下標(biāo)1開始篩選
return small + [pivot] + big
if __name__ == '__main__':
print quick_sort([1,2,3,10,2,3,4])