冒泡排序(BubbleSort)是我最近学习到的一种较为简单的排序方法,打算通过写下本篇文章来加深一下理解,同时呢,也可以给同样热爱编程的朋友作为参考,或好或坏倒变得不那么重要了。倘若有错误,望各位看官海涵。好了,废话少说,让我们开始吧!!!
一、冒泡排序的原理:
冒泡排序作为一种典型的交换排序方法,它的基本思想是通过无序区域中相邻元素之间的比较和位置交换使最小(最大)的元素像气泡一样漂浮到有序区的末尾,同时,无序区的元素个数也减一。再使第二大(小)的元素漂浮到有序区的倒数第二个。以此类推,当无序区只剩下一个元素的时候,我们的排序也就完成了。
文字的叙述与讲解总是抽象、无趣的。因此,请看下面的冒泡排序示意图:
通过上述的内容,大家应该对冒泡排序的原理有了一个大致了解了。让我们尝试一下怎么用代码实现吧。
二、代码实现:
1.创建一个无序的列表Mylist
2.第一个for循环,其范围为(0,len(Mylist))。因为i的值动态输出则为无序区的索引(应该可以这样称呼),用于后面我们比较相邻的元素值。
3.第二个for循环,范围则为(0,len(Mylist)-1-i)。因为在每一次排序后就有新的元素进入有序区,所以我们无序区的索引也应当相对应减少。
4.通过一个简单的if语句来判断相邻元素的大小,并进行排序
5.最后,输出排序完成的新列表
Mylist = [4, 2, 3, 1, 8]
for i in range(len(Mylist)):
for j in range(len(Mylist) - i - 1):
if Mylist[j] > Mylist[j + 1]:
Mylist[j], Mylist[j + 1] = Mylist[j + 1], Mylist[j]
print(Mylist)
附本人的学习过程的代码(可能比较难看明白,但是其输出结果显示了排序的全过程)
Mylist = [4, 2, 3, 1, 8]
count = 0
for i in range(len(Mylist)):
# print(i) # i恰好为无序区的index
for j in range(len(Mylist) - i - 1):
count = count + 1 # 显示循环的次数
print("第", count, "次排序:")
print("索引 =", j, "、", j + 1)
# i在本例中为(0,1,2,3)
# 而j则随i的变化导致其每一次输出的值的长度都不同,其结果就是每一次来进行比较的元素越来越少,直到只剩下一个元素,则排序就完成了。
# j1 = (0,1,2)
# j2 = (0,1)
# j3 = (0)
if Mylist[j] > Mylist[j + 1]:
print("Mylist[j] =", Mylist[j])
print("Mylist[j+1]",Mylist[j+1])
print("结果如下:")
Mylist[j], Mylist[j + 1] = Mylist[j + 1], Mylist[j]
print(Mylist)
文章到此结束了,但是我的代码仍然有一个致命的缺陷,是关于时间复杂度的,且等诸君自行发现吧!再见!