冒泡排序 (Bubble Sort),是一种计算机科学领域的较简单的排序算法。
以下内容来自百度:
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
冒泡排序算法的原理如下:
a.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
b.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
c.针对所有的元素重复以上的步骤,除了最后一个。
d.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
例题:排列大小
l=[9,5,3,4,1,8,7,2,6]
将l中的数字按照从小到大排列。
python中可直接l.sort() 即可完成,但这不是今天的重点,今天的重点是如何使用冒泡排序来完成从小到大的排列。
思路:依次将第一个数字与后面的数字进行比较,如果比后面的数字大就将大的数字放后面。
第一次可得:5,3,4,1,8,7,2,6,9
代码:
l=[9,5,3,4,1,8,7,2,6]
for i in range(0,len(l)-1):
if l[i]>l[i+1]:
n=l[i]
l[i]=l[i+1]
l[i+1]=n
print(n)--->[5, 3, 4, 1, 8, 7, 2, 6, 9]
那聪明的你肯定想到了重复此操作循环不就可以了,对的,只需要在上段代码中再添加一个循环。
代码:
for j in range(0,len(l)-1):
for i in range(0,len(l)-1):
if l[i]>l[i+1]:
n=l[i]
l[i]=l[i+1]
l[i+1]=n
print(l)--->[1, 2, 3, 4, 5, 6, 7, 8, 9]
伪代码就是:
[5, 3, 4, 1, 8, 7, 2, 6, 9] 第一次
[3, 4, 1, 5, 7, 2, 6, 8, 9] 第二次
[3, 1, 4, 5, 2, 6, 7, 8, 9] 第三次
[1, 3, 4, 2, 5, 6, 7, 8, 9] 第四次
[1, 3, 2, 4, 5, 6, 7, 8, 9] 第五次
[1, 2, 3, 4, 5, 6, 7, 8, 9] 第六次
[1, 2, 3, 4, 5, 6, 7, 8, 9] 第七次
[1, 2, 3, 4, 5, 6, 7, 8, 9] 第八次
[1, 2, 3, 4, 5, 6, 7, 8, 9] 第九次
[1, 2, 3, 4, 5, 6, 7, 8, 9] 第十次
通过上面的规律可以进一步发现,第一次遍历后最后一位肯定是最大,无需加入遍历,第二次遍历后最后最后二次肯定是最大无需遍历。所以代码可以进一步优化。另外python语言的独特性,连变量n都不必用到:
for j in range(0,len(l)-1):
for i in range(0,len(l)-1-j):
if l[i]>l[i+1]:
l[i],l[i+1]=l[i+1],l[i]
print(l)--->[1, 2, 3, 4, 5, 6, 7, 8, 9]