冒泡排序

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

实践

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)

流程图

graph TD
    Start["Start: Initialize nums as a copy of input"] --> A["Iterate over nums, from 0 to len(nums) - 1"]
    A --> B["Set flag = False"]
    B --> C["Iterate over nums from 0 to len(nums) - i - 1"]
    C --> D{"Is nums[j] > nums[j + 1]?"}
    D -->|No| E["No swap, continue to next pair"]
    D -->|Yes| F["Swap nums[j] and nums[j + 1]"]
    F --> G["Set flag = True"]
    E --> H["Continue iterating"]
    G --> H
    H --> C
    C --> I{"Is flag False?"}
    I -->|Yes| J["Exit the loop and return sorted nums"]
    I -->|No| A
    J --> F_end["End: Return sorted nums"]