冒泡排序(Bubble Sort) 是一种最简单的交换排序算法。
其核心思想是重复遍历要排序的数列,一次比较两个相邻元素,如果它们的顺序错误就把它们交换过来。此时,越大的元素会经由交换慢慢“浮”到数列的顶端(末尾),像气泡上浮一样,所以叫冒泡排序
冒泡排序的步骤如下:
(1)从第一个元素开始,比较相邻两个元素
(2)如果前一个 > 后一个,就交换它们
(3)一轮走完,最大的元素会被 “冒” 到最后
(4)对剩下的元素重复上述过程,直到没有交换发生,说明已经有序
例如,下面是对 [5, 2, 9, 1, 5, 6] 数组排序的过程:
[5, 2, 9, 1, 5, 6]
[5, 2, 1, 5, 6, 9]
[2, 1, 5, 5, 6, 9]
[1, 2, 5, 5, 6, 9]示例代码:
def bubble_sort(arr):
# 复制一份,避免修改原列表
arr = arr.copy()
# 获取列表长度
n = len(arr)
# 外层循环:控制排序轮数,一共需要 n-1 轮
for i in range(n - 1):
# 标记本轮是否发生交换,没有交换说明已经有序,可以提前结束
swapped = False
# 内层循环:每轮比较到 n-1-i 的位置(后面 i 个已经排好)
for j in range(n - 1 - i):
# 如果前一个数 > 后一个数,交换
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
swapped = True
# 如果本轮没有交换,直接退出
if not swapped:
break
return arr
if __name__ == "__main__":
nums = [5, 2, 9, 1, 5, 6]
print("原始列表:", nums)
print("冒泡排序后:", bubble_sort(nums))运行结果:
原始列表: [5, 2, 9, 1, 5, 6]
冒泡排序后: [1, 2, 5, 5, 6, 9]