Python:数据结构及算法(2)——排序(1)

it2026-03-03  5

简单的排序算法:冒泡排序,插入排序,选择排序。 排序算法重要的是要分清楚已经排过序的有序区和未排序的无序区

冒泡排序

# 冒泡排序 将最大的比较排到最上边 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]
最新回复(0)