排序算法-冒泡排序

冒泡排序

算法描述

冒泡排序的算法思想是:每次比较相临两个元素的值,若不符合顺序,则将两者交换;最终多次交换(第一遍循环)后,最大(最小)的元素沉淀到最后;然后针对剩余的前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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值