当前位置:首页>python>春招学考社团_python专题_zt4_冒泡排序法.py

春招学考社团_python专题_zt4_冒泡排序法.py

  • 2026-09-02 20:22:28
春招学考社团_python专题_zt4_冒泡排序法.py

专题知识点:冒泡排序法

基本思想:冒泡排序是一种简单的交换排序算法,它的核心思路是重复地走访过要排序的数列,一次比较两个相邻的元素,如果它们的顺序错误(比如从小到大排序时,前一个比后一个大)就把它们交换过来。

“冒泡” 的由来:每一轮遍历都会将当前未排序部分中最大的元素逐步 “浮” 到数列的末尾,就像水中的气泡逐渐上浮到水面一样,这也是它名字的由来。

遍历次数:对于一个长度为n的数组,最多需要进行n-1轮遍历(因为每一轮至少确定一个元素的最终位置,最后一个元素会自动归位)。

# 待排序的列表(示例数据)b = [150, 300, 299, 149, 298]# 获取列表的长度(元素个数)n = len(b)# 外层循环:控制排序的轮数,共需要n-1轮(最后一个元素会自动归位)# x表示当前是第x+1轮(x从0开始)for x in range(0, n-1):    # 内层循环:控制每一轮中相邻元素的比较和交换    # n-1-x:每完成一轮,末尾的x个元素已排好序,无需再比较,减少循环次数    for y in range(0, n-1-x):        # 比较相邻的两个元素:b[y](前一个)和b[y+1](后一个)        # 此处条件是b[y]<b[y+1],表示按**降序**排序(大的在前,小的在后)        # 如果要升序排序,只需将条件改为b[y]>b[y+1]        if b[y] < b[y+1]:            # 交换两个元素的位置(Python特有写法,无需临时变量)            b[y], b[y+1] = b[y+1], b[y]# 输出排序后的列表print('排序后的b:', b)  # 输出:排序后的b: [300, 299, 298, 150, 149]

知识讲解:

排序方向说明:原代码中if b[y]<b[y+1]的条件实现的是降序排序(从大到小),这是新手容易混淆的点,我在注释中特别标注了升序 / 降序的修改方式。

循环次数拆解(以示例为例):

列表长度 n=5,外层循环执行 4 轮(x=0,1,2,3)。

x=0(第 1 轮):内层循环执行 4 次(y=0,1,2,3),把最大的数 300 “浮” 到末尾。

x=1(第 2 轮):内层循环执行 3 次(y=0,1,2),把次大的数 299 “浮” 到倒数第二位。

以此类推,每轮内层循环次数递减,减少不必要的比较。

优化点(可选):如果某一轮内层循环中没有发生任何交换,说明列表已经有序,可以提前终止循环,减少遍历次数(新手可先掌握基础版本,再了解优化)。

知识总结:

冒泡排序的核心是两层循环:外层控制轮数,内层控制每轮的相邻元素比较交换。

每一轮遍历会将当前未排序部分的 “极值”(升序是最大值,降序是最小值)移动到末尾,因此内层循环次数逐轮递减。

排序方向由if条件决定:b[y]>b[y+1]是升序,b[y]<b[y+1]是降序。

最新文章

随机文章