想必在学习Python之前,大家已经在java,C语言中学习过“冒泡排序”方法,那继续让我们了解Python中的冒泡排序算法吧。
标题一:什么是冒泡排序算法?
冒泡排序算法是一种简单的排序算法,它重复地遍历待排序的元素,比较相邻的两个元素,并交换位置,直到整个序列有序为止。
假设有n个元素的列表需要排序,冒泡排序算法进行了如下操作:
1. 首先比较当前元素和它后面相邻的元素,如果前面的元素比后面的元素大,则交换这两个元素。
*若要在Python中实现两数交换,则可以使用:
变量表达式 | 说明 |
a,b=b,a | 实现变量a和b的值互相交换 |
2. 执行第一轮遍历:从第1个元素开始到倒数第二个元素,重复执行第一步的操作。即可找出该序列中的最小的元素,放置末尾。
3. 执行第二轮遍历:从第一个元素开始到倒数第三个元素,重复执行第一步操作。即可找出序列中第二小的元素。放置倒数第二位。
4. 执行第n-1轮遍历:从第一个元素开始与倒数第n个元素,重复执行第一步操作,即第一个元素和第二个元素进行比较。则可以完成最终的从大到小的排序。
标题二:代码示例
def bubble_sort(list): #冒泡排序的英文名为:bubble sort;
n = len(list) #len()函数,可得到列表的长度
flag="Y"
for i in range(n - 1): #i的数值为第几轮遍历 下标从0开始;
# 每次遍历将最小的元素移到末尾
for j in range(n - i - 1):
if list[j] < list[j + 1]:
# 交换相邻的元素位置
list[j], list[j + 1] = list[j + 1], list[j] #即满足条件的话,
if flag=="Y":
print("调试信息第", i + 1, "轮", list)
return list
list= [20, 24, 1, 7, 19, 17]
print("未排序时的列表:\n",list)
newlist = bubble_sort(list)
print("经过冒泡排序后的列表:\n",newlist)
解释:def bubble_sort:为定义了一个名为bubble_sort()的函数方法。def->(define :定义),两变量i和j进行循环遍历,直到条件不满足,从而return list退出。即返回最后已经排序好的列表。
运行结果如下:
标题三:改良的冒泡排序算法:
不同于上面的算法的是,改良后的冒泡排序算法通过一个变量来判断,排序是否结束。即定义一个变量r,若发生了排序,即交换值,则将变量r=1.若某一轮未发生交换,则将变量r=0或者结束循环。代码示例如下:
def bubble_sort(list): #冒泡排序的英文名为:bubble sort;
n = len(list) #len()函数,可得到列表的长度
r=1
flag='Y'
for i in range(n - 1): #i的数值为第几轮遍历 下标从0开始;
# 每次遍历将最小的元素移到末尾
if r==1:
r=0
for j in range(n-1-i):
if list[j] < list[j + 1]:
# 交换相邻的元素位置
list[j], list[j + 1] = list[j + 1], list[j] #即满足条件的话,
r=1
if flag=="Y":
print("调试信息第",i+1,"轮",list)
else :
break
return list
list= [20, 24, 1, 7, 19, 17]
print("未排序时的列表:\n",list)
newlist = bubble_sort(list)
print("经过冒泡排序后的列表:\n",newlist)
运行结果展示:
以上两者进行比较,程序的循环由5轮循环变为了3轮循环就结束了,显而易见的减少了工作量。
但是读者应该明白并不是所有的待排序列表都和上述例子一样,也有特殊的情况,即便使用改良的冒泡排序也要全部遍历一遍,最简单的例子[1,2,3]。所以在实际中,上述改良的冒泡排序也并不一定是耗时最短的,也存在特殊情况。
上述为入门Python的--冒泡排序算法的简单解释和介绍。若上述存在什么问题。还望大家在评论区说出或者私信我,谢谢大家。