1冒泡排序
时间复杂度n**2
import random
def bubble_sorted(list):
n = len(list)
for j in range(0, n - 1): # 最后一次不用排序
for i in range(0, n - 1 - j): # 每轮排序后面j位已经排好了。
if list[i] > list[i + 1]:
list[i], list[i + 1] = list[i + 1], list[i]
return list
def test_bubble_sorted():
seq = list(range(10))
random.shuffle(seq)
sorted_seq = sorted(seq)
bubble_sorted(seq)
assert seq == sorted_seq
2选择排序
让第一个数作为最小值,对比一遍,找出最小的,交换位置,每次找最小的交换位置。时间复杂度n**2
"""选择排序"""
def select_sort(seq):
n = len(seq)
for i in range(n-1):
min_idx = i
for j in range(i+1, n):
if seq[j] < seq[min_idx]:
min_idx = j
if min_idx != i:
seq[i], seq[min_idx] = seq[min_idx], seq[i]
return seq
def test_select_sort():
seq = list(range(10))
random.shuffle(seq)
sorted_seq = sorted(seq)
select_sort(seq)
assert seq == sorted_seq
3插入排序
从第2个开始和第一个比较,
# 插入排序,
def insert_sort(seq):
n = len(seq)
for i in range(1, n):
value = seq[i]
pos = i
while pos > 0 and value < seq[pos - 1]:
seq[pos] = seq[pos - 1]
pos -= 1
seq[pos] = value
def test_insert_sort():
seq = list(range(10))
random.shuffle(seq)
sorted_seq = sorted(seq)
insert_sort(seq)
assert seq == sorted_seq