今天来跟大家一起学习一下如何用 Python 编写一个经典的冒泡排序程序,相信很多小伙伴在刚开始学习编程的时候,都接触过这个算法,我们就从一个简单的例子开始,一步步掌握冒泡排序的奥秘吧!
我们要了解冒泡排序的基本原理,冒泡排序是一种简单的排序算法,它重复地遍历待排序的列表,比较每对相邻的项目,并交换不满足排序顺序的项,这个过程一直重复,直到没有更多相邻项需要交换,也就是列表已经排序完成。
下面,我们就开始动手编写代码吧!
定义一个列表,用于存放需要排序的数字,这里我们可以随机生成一个列表,也可以手动定义一个列表。
import random
# 生成一个随机列表
list_a = [random.randint(0, 100) for i in range(10)]
print("原始列表:", list_a)
编写冒泡排序的核心代码,这里我们需要两个嵌套循环,外层循环用于控制排序的趟数,内层循环用于进行比较和交换。
# 冒泡排序
def bubble_sort(arr):
n = len(arr)
for i in range(n):
# 设置一个标记,用于优化排序
flag = False
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
# 交换两个元素的位置
arr[j], arr[j+1] = arr[j+1], arr[j]
flag = True
# 如果这一趟没有发生交换,说明列表已经有序,可以提前结束排序
if not flag:
break
调用冒泡排序函数,对列表进行排序。
bubble_sort(list_a)
print("排序后的列表:", list_a)
我们已经完成了一个简单的冒泡排序程序,大家有没有发现一个问题?如果列表已经是有序的,我们的程序还是会执行完所有的趟数,这显然是不必要的,我们可以对代码进行优化,加入一个标记,用于判断这一趟是否发生了交换,如果没有发生交换,说明列表已经有序,可以提前结束排序。
下面,我们来详细解释一下代码的各个部分:
n = len(arr): 获取列表的长度。for i in range(n): 外层循环,控制排序的趟数,最多需要 n-1 趟排序。flag = False: 初始化标记为 False。for j in range(0, n-i-1): 内层循环,进行比较和交换,每一趟循环结束后,最大的元素会被交换到列表的最后。if arr[j] > arr[j+1]: 如果当前元素大于后一个元素,则交换它们的位置。arr[j], arr[j+1] = arr[j+1], arr[j]: 交换两个元素的位置。flag = True: 发生了交换,将标记设置为 True。if not flag: 如果这一趟没有发生交换,说明列表已经有序,可以提前结束排序。
通过以上步骤,我们就完成了一个冒泡排序的 Python 程序,除了冒泡排序,还有很多其他的排序算法,如快速排序、归并排序等,感兴趣的小伙伴可以继续深入研究,掌握更多排序算法。
希望大家通过这篇文章,能够对冒泡排序有更深入的了解,并在实际编程中运用自如,一起加油吧!💪💪💪

