排序算法之冒泡排序Python

排序算法之冒泡排序

排序算法主要是对给定的顺序表进行元素排序,升序或者降序。最简单的思路就是两两对比,找出最大的,放到位置上,然后继续在剩下的元素中找出次大的放到位置上,如此往复。这就是冒泡的思想,两两对比,就像水中的一个气泡,逐步浮出水面。

接下来详细分析一下,第一次冒泡时,加入有N个元素,那么就需要对比N-1次,找到最大的元素;第二次冒泡时,因为最大的已经找到了,剩下的是N-1个元素,所以需要比较N-1-1次,找到次大的元素,以此类推。那么当找到倒数第二大的元素时(也就是次小元素),还剩下一个元素,这时其实就不用比较了,因为就一个肯定是最小的了。

**所以每一次找到一个最大元素,排序一共只需要找出N-1个最大元素即可。即需要比较N-1次,外层循环N-1次。**那么在每次循环中(找最大元素时),怎么比较呢?第一个和第二个进行比较,(假设要升序排列),那么就把大的放在后面,小的放在前面那个元素上。这样,第一次比较完后,大的就放在第二个上了。第二次比较时,第二个和第三个元素比较,以此类推,最后是第N-1个和第N个进行比较,所以是循环N-1次。这样找到了第一个最大元素,那么在找第二大元素时,只需要循环N-2次。所以可以看出,内层循环次数是逐步减少的。

# 冒泡排序
def bubble_sort(alist):

    for i in range(len(alist)-1):
       for j in range(0, len(alist) - 1 - i):
           if alist[j] > alist[j + 1]:
               alist[j], alist[j + 1] = alist[j + 1], alist[j]

alist = [1,2,5,84,10,1,3]
bubble_sort(alist)
print(alist)

所以比较次数是1次到n-1次累加求和,数量级为(n^2),
即时间复杂度为O(n^2)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值