简单的排序算法:冒泡排序,插入排序,选择排序。
排序算法重要的是要分清楚已经排过序的有序区和未排序的无序区
冒泡排序
# 冒泡排序 将最大的比较排到最上边
def bubble_sort(lis):
for i in range(len(lis)-1): # i是第几趟
exchange = False
for j in range(len(lis)-i-1):
if lis[j] > lis[j+1]:
lis[j], lis[j+1] = lis[j+1], lis[j]
exchange = True
print(lis) # 输出每趟排序后的结果
if not exchange:
return
测试
lis = [9, 8, 5, 7, 2, 6, 3, 0, 4, 1]
print('未排序列表如下:')
print(lis)
print('排序过程如下:')
bubble_sort(lis)
print('排序后列表如下:')
print(lis)
结果
未排序列表如下:
[9, 8, 5, 7, 2, 6, 3, 0, 4, 1]
排序过程如下:
[8, 5, 7, 2, 6, 3, 0, 4, 1, 9]
[5, 7, 2, 6, 3, 0, 4, 1, 8, 9]
[5, 2, 6, 3, 0, 4, 1, 7, 8, 9]
[2, 5, 3, 0, 4, 1, 6, 7, 8, 9]
[2, 3, 0, 4, 1, 5, 6, 7, 8, 9]
[2, 0, 3, 1, 4, 5, 6, 7, 8, 9]
[0, 2, 1, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
排序后列表如下:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
插入排序
# 插入排序 打扑克牌摸牌类似
def insert_sort(lis):
for i in range(1, len(lis)): # i表示摸到的牌
j = i-1
tmp = lis[i]
while j >= 0 and lis[j] > tmp:
lis[j+1] = lis[j]
j -= 1
lis[j+1] = tmp
print(lis)
测试
lis = [9, 8, 5, 7, 2, 6, 3, 0, 4, 1]
print('未排序列表如下:')
print(lis)
print('排序过程如下:')
insert_sort(lis)
print('排序后列表如下:')
print(lis)
结果
未排序列表如下:
[9, 8, 5, 7, 2, 6, 3, 0, 4, 1]
排序过程如下:
[8, 9, 5, 7, 2, 6, 3, 0, 4, 1]
[5, 8, 9, 7, 2, 6, 3, 0, 4, 1]
[5, 7, 8, 9, 2, 6, 3, 0, 4, 1]
[2, 5, 7, 8, 9, 6, 3, 0, 4, 1]
[2, 5, 6, 7, 8, 9, 3, 0, 4, 1]
[2, 3, 5, 6, 7, 8, 9, 0, 4, 1]
[0, 2, 3, 5, 6, 7, 8, 9, 4, 1]
[0, 2, 3, 4, 5, 6, 7, 8, 9, 1]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
排序后列表如下:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
选择排序
# 选择排序 选一个最小的放到第一个
def select_sort(lis):
for i in range(len(lis)-1): # i表示第几趟
min_loc = i
for j in range(i, len(lis)):
if lis[min_loc] > lis[j]:
lis[j], lis[min_loc] = lis[min_loc], lis[j]
print(lis)
运行
lis = [9, 8, 5, 7, 2, 6, 3, 0, 4, 1]
print('未排序列表如下:')
print(lis)
print('排序过程如下:')
select_sort(lis)
print('排序后列表如下:')
print(lis)
结果
未排序列表如下:
[9, 8, 5, 7, 2, 6, 3, 0, 4, 1]
排序过程如下:
[0, 9, 8, 7, 5, 6, 3, 2, 4, 1]
[0, 1, 9, 8, 7, 6, 5, 3, 4, 2]
[0, 1, 2, 9, 8, 7, 6, 5, 4, 3]
[0, 1, 2, 3, 9, 8, 7, 6, 5, 4]
[0, 1, 2, 3, 4, 9, 8, 7, 6, 5]
[0, 1, 2, 3, 4, 5, 9, 8, 7, 6]
[0, 1, 2, 3, 4, 5, 6, 9, 8, 7]
[0, 1, 2, 3, 4, 5, 6, 7, 9, 8]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
排序后列表如下:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]