冒泡排序(Bubble Sort)—相邻比较,大值'冒泡'到末尾
核心思想(竞赛记忆版)
重复遍历数组,每次比较相邻两个元素,若前一个比后一个大则交换;每一轮遍历都会将当前未排序部分的最大值逐步'冒泡'到其最终位置(未排序部分的末尾)
- 类比:体育课排队,从左到右依次检查相邻两人,高的站右边,每轮结束后,当前最高的人会站到为排队人群的最后。
排序可视化过程(以数组[5,3,8,4,2]为例,升序)
数组长度 n=5,最多需要 n-1 轮(因为最后 1 个元素自然有序),每轮比较次数逐轮减少(已排序部分无需再比):
- 第 1 轮(未排序:[5,3,8,4,2]):5↔3 交换→[3,5,8,4,2] →5↔8 不换→8↔4 交换→[3,5,4,8,2] →8↔2 交换→[3,5,4,2,8](最大值 8 归位)
- 第 2 轮(未排序:[3,5,4,2]):3↔5 不换→5↔4 交换→[3,4,5,2,8] →5↔2 交换→[3,4,2,5,8](次大值 5 归位)
- 第 3 轮(未排序:[3,4,2]):3↔4 不换→4↔2 交换→[3,2,4,5,8](4 归位)
- 第 4 轮(未排序:[3,2]):3↔2 交换→[2,3,4,5,8](3 归位,排序完成)
Python 基础实现(直接套用,基础版)
def bubble_sort(arr): #复制原数组,避免修改原数据
arr = arr.copy()
n = len(arr)
#外层循环:控制排序轮数,共 n-1 轮
for i in range(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]
return arr
#案例 1:基础整数数组
arr1 = [5,3,8,4,2]
print("冒泡排序基础版——整数数组:",bubble_sort(arr1))#输出:[2,3,4,5,8]
#案例 2:含重复元素
arr2 = [7,3,,,]
(,bubble_sort(arr2))
arr3 = [,,,,]
(,bubble_sort(arr3))

