利用Python实现冒泡排序

今天说一个比较简单易懂的算法,相信大家在大学里面肯定都有接触过。在这里介绍排序算法的一种冒泡排序,对于初学Python的新人来说因该很容易理解。排序顾名思义,对给定的一串字符(其实也不一定是字符,可以是其他可比较的元素)按照从大到小或者从小到大的顺序排列。
算法原理:
1.从第一位开始比较相邻的两个元素。如果前者比后者大(由小到大排序),那么我们就交换它们。
2.针对每一个两两相邻的元素都做比较操作。直到把所有元素比较完。这个时候最后一个元素是最大值。
3.此时我们在从头比较,重复第二步的操作,直到比较出倒数第二大的元素。
4.以此类推知道所有的元素全部比较完成,这样从小到大序列即排序完成。

下面贴上代码示例,既然上面解释是从小到大那我们代码来个从大到小把:)
这里我们直接用random模块来随机获取值。

import random


def bubblesort(target):
    length = len(target)
    while length > 0: 
        length -= 1
        cur = 0
        while cur < length: #拿到当前元素
            if target[cur] < target[cur + 1]:
                target[cur], target[cur + 1] = target[cur + 1], target[cur]
            cur += 1
    return target        
if __name__ == '__main__':
    a = [random.randint(1,1000) for i in range(100)]
    print bubblesort(a)

这里外层循环用来控制这个序列长度和比较次数。第二层循环用来交换。
按照惯例,来分析一下时间复杂度。我们先来定义比较次数记为C,元素的移动次数记为M。若我们随机到正好一一串从小到达排序的数列,那我们比较的一趟比较就能完事,那比较次数只与你定义的数列长度有关,则C=n-1,因为正好是从小到达排列的所以不需要在移动了,所以M=0。所以这个时候冒泡排序为最为理想的时间复杂度O(n)。
那么我们现在再来考虑一个极端的情况,整个序列都是反序的。则完成排序需要n-1次排序,每次排序需要n-i次比较(1<=i<=n-i),在算法上比较之后移动数据需要三次操作。在这种情况下,比较和移动的数均达到了最大值。

Cmax=n(n-1)/2=O(n^2)
Mmax=3n(n-1)/2=O(n^2)
所以,冒泡算法总的平均时间复杂度为O(n^2)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值