Skip to content

【练习】冒泡排序

项目简介

冒泡排序

知识模块

  • Python 编程语言

知识点

  • 参数说明
  • 条件语句 if-else
  • 循环嵌套
  • 列表操作
  • 判断

受众

  • 初级测试开发工程师
  • 初级Python开发工程师

作业要求

编写一个Python程序,实现冒泡排序。

解题思路

  1. 获取待排序列表的长度,用于确定外层循环的次数。

  2. 外层循环:从第一个元素开始,遍历到倒数第二个元素,每次循环找到剩余元素中的最大值。

  3. 内层循环:在每次外层循环时,从第一个元素开始,遍历到倒数第 i+1 个元素,比较相邻的两个元素的大小。

  4. 根据是否指定了比较键 key 来确定比较的方式。

  5. 继续进行内层循环,直到所有的元素都经过比较和交换。

  6. 完成外层循环后,列表已经按照指定的顺序进行了排序。

  7. 根据 reverse 的值确定返回的排序结果:

完整代码

def bubbleSort(obj, key=None, reverse=False):
    length = len(obj)
    # 外层循环用来确定找出剩余数据的最大值,N个数,找n-1次即可
    for i in range(length-1):
        for j in range(length-i-1):
            if key:  # if key != None:
                if key(obj[j]) > key(obj[j + 1]):
                    obj[j], obj[j + 1] = obj[j + 1], obj[j]
            else:
                if obj[j] > obj[j+1]:
                    obj[j], obj[j+1] = obj[j+1], obj[j]
    # return obj if not reverse else obj[::-1]
    if reverse:
        return obj[::-1]
    else:
        return obj

代码讲解

  1. 首先定义了一个名为 bubbleSort 的函数,用于实现冒泡排序算法。

  2. bubbleSort 函数接受三个参数:objkeyreverse。其中 obj 是待排序的列表,key 是一个可选的函数参数,用于指定比较的键,reverse 则是一个可选的布尔参数,用于指定排序的顺序。

  3. 在函数中,使用 len(obj) 获取待排序列表的长度,即列表中元素的个数。

  4. 然后使用外层循环进行迭代,循环次数为数组长度减1。每次循环将找出剩余数据的最大值放在最后的位置。

  5. 在外层循环中,使用内层循环从第一个元素开始遍历,直到倒数第 i+1 个元素。通过比较相邻的两个元素的大小,如果前一个元素比后一个元素大,则交换它们的位置,确保较大的元素在后面。

  6. 在两个嵌套的循环中,通过判断 key 是否存在,来决定使用哪种比较方式。如果指定了 key,则使用 key(obj[j])key(obj[j + 1]) 进行比较;否则直接使用元素本身进行比较。

  7. 最后,根据 reverse 参数的值确定返回的排序结果。如果 reverseTrue,则将列表反转后返回,即返回逆向排序的结果,即降序;如果未指定或 reverseFalse,则直接返回列表,即返回正向排序的结果,即升序。