冒泡法
标签(空格分隔): python-排序算法
冒泡法介绍
- 三大基础排序算法之一
- 冒泡法
- 属于交换排序
- 两两比较大小, 交换位置。
- 结果分为升序和降序排序
- 时间复杂度
- n * (n - i - 1) = n**2
代码实现
lst = [5, 6, 7, 8, 9, 10, 11, 12, 15, 14] # 待排序列表
length = len(lst) # 长度
count = 0 # 计数统计
for i in range(length):
Flag = True
for j in range(length - i - 1):
if lst[j] > lst[j+1]:
Flag = False # 如果在一轮比较中,没有发生交换则表示排序已经完成
count += 1 # 统计效率
lst[j], lst[j+1] = lst[j+1], lst[j]
if Flag: # 使用标记来控制提速
break
print(lst)
print(count)
- [x] 唯一的优化思路:
- 通过加标记 Flag,如果在一轮比较中,没有发生交换则表示排序已经完成, 可以直接退出排序了
冒泡法总结
- 冒泡法需要数据一轮轮比较
- 可以设定一个标记判断此轮是否有数据发生交换,如果没有发生交换,可以结束排序,如果发生交换,则继续下一轮排序
- 最差的排序情况: 初始顺序与目标顺序完全相反,则遍历次数为:
n * (n-1)/2
- 最好的排序情况: 初始顺序与目标顺序完全相同,则遍历次数为: n-1 次
- 时间复杂度: O(n**2)
- 空间复杂度: O(1) ---> 只使用了一个中间变量