您的位置:首页 > 其它

排序算法-冒泡排序

2017-11-20 22:25 190 查看

冒泡排序

算法描述

冒泡排序的算法思想是:每次比较相临两个元素的值,若不符合顺序,则将两者交换;最终多次交换(第一遍循环)后,最大(最小)的元素沉淀到最后;然后针对剩余的前n-1个元素,再进行第二遍循环比较,最后将第二大(小)的元素沉淀到最后。持续照此过程,直到排序完成。

算法实现(Python)

def Bubble(arr):
for i in range(len(arr)-1,0,-1):
for j in range(i):
if arr[j]>arr[j+1]:
arr[j],arr[j+1]=arr[j+1],arr[j]
print arr

if __name__=='__main__':
arr=[7,4,9,2,5,1]
Bubble(arr)


算法改进

上面这种算法存在一个缺点,即不管中间某次排序过程后,序列是否已经排好序,都要要进行n-1次循环比较。因此,会存在冗余的排序过程,增加了时间复杂度,改进如下(增加布尔变量flag):

def Bubble(arr):
flag=False
for i in range(len(arr)-1,0,-1):
for j in range(i):
if arr[j]>arr[j+1]:
arr[j],arr[j+1]=arr[j+1],arr[j]
flag=True
if not flag:
break
print arr

if __name__=='__main__':
arr=[7,4,9,2,5,1]
Bubble(arr)


当某次循环过程中,一次值交换都没发生,说明序列已经排好序,则退出迭代过程。

算法复杂度

最坏情况:序列逆序,需要进行n*(n-1)/2次基础操作,时间复杂度为O(n^2)

最好情况:序列顺序,需要进行n-1次基础操作,时间复杂度为O(n)

平均情况:时间复杂度为O(n^2)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息