python实现冒泡排序
一、冒泡排序简介
冒泡排序(Bubble Sort)是一种常见的排序算法,相对来说比较简单。
冒泡排序重复地走访需要排序的元素列表,依次比较两个相邻的元素,如果顺序(如从大到小或从小到大)错误就交换它们的位置。重复地进行直到没有相邻的元素需要交换,则元素列表排序完成。
在冒泡排序中,值最大(或最小)的元素会通过交换慢慢“浮”到元素列表的“顶端”。就像“冒泡”一样,所以被称为冒泡排序。
二、冒泡排序的原理
1. 比较相邻的两个元素。如果第一个元素大于第二个元素则交换他们的位置(升序如此,降序相反)。
2. 从列表的开始一直到结尾,依次对每一对相邻元素都进行比较。这样,值最大的元素就通过交换“冒泡”到了列表的结尾,完成第一轮“冒泡”。
3. 重复上一步,继续从列表开头依次对相邻元素进行比较。已经“冒泡”出来的元素不用比较(一直比较到结尾也可以,已经“冒泡”到后面的元素即使比较也不需要交换,不比较可以减少步骤)。
4. 继续从列表开始进行比较,每轮比较会有一个元素“冒泡”成功。每轮需要比较的元素个数会递减,一直到只剩一个元素没有“冒泡”时(没有任何一对元素需要比较),则列表排序完成。
以次列表为例[7,5,3,6] #冒泡排序,对列表进行升序排序 [7,5,3,6] #原始列表 [5,7,3,6] #第一轮第一次 比较7和5的大小,7>5 交换位置 [5,3,7,6] #第二次 比较7和3的大小,7>3 交换位置 [5,3,6,7] #第三次 比较7和6的大小,7>6 交换位置,第一轮冒泡排序完毕(将最大值放在了列表的最后一个元素) [3,5,6,7] 第二轮第一次 比较5和3的大小,5>3交换位置
三、代码实现
def bubble_sort(alist):
#相邻两个元素进行比较,如果发现位置错误,则进行交换
n=len(alist)
for k in range(n-1):
count=0
for i in range(0,n-1-k):
if alist[i]>alist[i+1]:
alist[i],alist[i+1]=alist[i+1],alist[i]
count+=1
#判断count的值是否等于0,如果等于0说明没有交换
if count==0:
break
alist=[7,5,3,6,44,22,99,11]
bubble_sort(alist)
print("排序后的数组为:")
print(alist)
结果展示
排序后的数组为:
[3, 5, 6, 7, 11, 22, 44, 99]
四、冒泡排序的时间复杂度及其稳定性
1.最优时间复杂度:O(n) (表示遍历一次发现没任何可以交换的元素,排序结束)
2.最坏时间复杂度:O(n^2)
3.稳定性 :稳定