【练习】冒泡排序
项目简介
冒泡排序
知识模块
- Python 编程语言
知识点
- 参数说明
- 条件语句 if-else
- 循环嵌套
- 列表操作
- 判断
受众
- 初级测试开发工程师
- 初级Python开发工程师
作业要求
编写一个Python程序,实现冒泡排序。
解题思路
-
获取待排序列表的长度,用于确定外层循环的次数。
-
外层循环:从第一个元素开始,遍历到倒数第二个元素,每次循环找到剩余元素中的最大值。
-
内层循环:在每次外层循环时,从第一个元素开始,遍历到倒数第
i+1
个元素,比较相邻的两个元素的大小。 -
根据是否指定了比较键
key
来确定比较的方式。 -
继续进行内层循环,直到所有的元素都经过比较和交换。
-
完成外层循环后,列表已经按照指定的顺序进行了排序。
-
根据
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
代码讲解
-
首先定义了一个名为
bubbleSort
的函数,用于实现冒泡排序算法。 -
bubbleSort
函数接受三个参数:obj
、key
和reverse
。其中obj
是待排序的列表,key
是一个可选的函数参数,用于指定比较的键,reverse
则是一个可选的布尔参数,用于指定排序的顺序。 -
在函数中,使用
len(obj)
获取待排序列表的长度,即列表中元素的个数。 -
然后使用外层循环进行迭代,循环次数为数组长度减1。每次循环将找出剩余数据的最大值放在最后的位置。
-
在外层循环中,使用内层循环从第一个元素开始遍历,直到倒数第
i+1
个元素。通过比较相邻的两个元素的大小,如果前一个元素比后一个元素大,则交换它们的位置,确保较大的元素在后面。 -
在两个嵌套的循环中,通过判断
key
是否存在,来决定使用哪种比较方式。如果指定了key
,则使用key(obj[j])
和key(obj[j + 1])
进行比较;否则直接使用元素本身进行比较。 -
最后,根据
reverse
参数的值确定返回的排序结果。如果reverse
为True
,则将列表反转后返回,即返回逆向排序的结果,即降序;如果未指定或reverse
为False
,则直接返回列表,即返回正向排序的结果,即升序。