冒泡排序

把大的元素往后挪,最大的元素向右移到已排序的区域就像浮出水面,也就是 “冒泡”。

实践

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def BubbleSort(nums):
nums = nums[:] # 创建副本,避免修改原始数据
for i in range(len(nums) - 1): # 最多 n-1 次就能完成排序
flag = False # 标记一下,如果这一轮下来还是 False 就说明没有交换,意味着已经排序好了
for j in range(len(nums) - i - 1): # 已经冒出水面的不用考虑
if nums[j] > nums[j + 1]: # 如果下一个数比当前的数小的话就交换,把大的往右移
nums[j], nums[j + 1] = nums[j + 1], nums[j]
flag = True # 交换了就标记为 True ,后面继续排序
if not flag: # 如果已经排序好了就跳出循环直接返回
break
return nums

# 测试
sort.test(BubbleSort)

流程图