1.冒泡排序
算法描述
- 列表每相邻的两个数比较,如果前面比后面的大,则交换两个数
- 一趟排序完成后,则无序区减少一个数,有序区增加一个数
算法示意图
代码实现
import copy # 冒泡排序 时间复杂度o(n^2) # 列表每相邻的两个数比较,如果前面比后面的大,则交换两个数 # 一趟排序完成后,则无序区减少一个数,有序区增加一个数 def bubble_sort(li): for i in range(len(li)-1): # 需要n-1趟 for j in range(len(li)-i-1): # 无序区为len(li)-i-1 # 每趟把最大的元素放到最后 if li[j] > li[j+1]: # 如果从大到小排序改为< li[j], li[j+1] = li[j+1], li[j] print('第%s趟冒泡后,排序为'%(i+1), li) # 优化后冒泡排序 # 当对无序区冒泡排序完一趟后,如果没有发生交换,说明无序区是排序好的 def bubble_sort_optimize(li): for i in range(len(li)-1): exchange_flag = False # 记录交换标志 for j in range(len(li)-i-1): if li[j] > li[j+1]: li[j], li[j+1] = li[j+1], li[j] exchange_flag = True if not exchange_flag: return print('第%s趟冒泡后,排序为' %(i+1), li) li=[9,8,7,1,2,3] li2=copy.deepcopy(li) print('---普通冒泡-----') print(li) bubble_sort(li) print('---优化冒泡-----') print(li2) bubble_sort_optimize(li2) >>>>>>输出结果 ---普通冒泡----- [9, 8, 7, 1, 2, 3] 第1趟冒泡后,排序为 [8, 7, 1, 2, 3, 9] 第2趟冒泡后,排序为 [7, 1, 2, 3, 8, 9] 第3趟冒泡后,排序为 [1, 2, 3, 7, 8, 9] 第4趟冒泡后,排序为 [1, 2, 3, 7, 8, 9] 第5趟冒泡后,排序为 [1, 2, 3, 7, 8, 9] ---优化冒泡----- [9, 8, 7, 1, 2, 3] 第1趟冒泡后,排序为 [8, 7, 1, 2, 3, 9] 第2趟冒泡后,排序为 [7, 1, 2, 3, 8, 9] 第3趟冒泡后,排序为 [1, 2, 3, 7, 8, 9]