冒泡排序
列表每相邻的数,如果前面的数比后面的数大,则交换这两个数
一趟排序完成后,则当前最大的数已经冒泡到列表的尾部。
def bubble_sort(li):
for i in range(len(li) - 1):
for j in range(len(li) - 1 - i):
if li[j] > li[j + 1]:
li[j], li[j + 1] = li[j + 1], li[j]
选择排序
第一趟排序记录最小的数,放到第一个位置;
第二趟排序记录列表无序区最小的数,放到第二个位置。
def select_sort(li):
for i in range(len(li) - 1):
min_loc = i
for j in range(i + 1, len(li)):
if li[j] < li[min_loc]:
min_loc = j
if min_loc != i:
li[i], li[min_loc] = li[min_loc], li[i]
插入排序
假设初始手里有序区只有一张牌,每次从无序区摸一张牌,插入到手里已有牌的正确位置。
def insert_sort(li):
for i in range(1, len(li)): # i表示摸到的牌的下标
tmp = li[i]
j = i - 1 # j表示手里的牌的下标
while j >= 0 and li[j] > tmp:
li[j + 1] = li[j]
j -= 1
li[j + 1] = tmp