数据结构与算法学习笔记五 --- 冒泡排序算法

冒泡排序算法(Bubble Sort)

冒泡排序算法原理: 从未排序的序列的开头开始,比较相邻的两个元素,将值大(小)放在右边,每轮比较完成都会将最大(最小)放在最后一位,下一轮就只要从开头比较到倒数第二个。以此类推,直到序列排序完毕。

对于一个有n个元素的序列,需要进行 n-1 轮循环比较.

冒泡排序算法的python 实现

代码如下:

ef bubble_sort(alist):
    """冒泡排序"""
    for j in range(1, len(alist)):
        # 外循环控制总轮数(n-1)轮
        for i in range(0, len(alist)-j):
            # 内循环控制每轮数据比较次数
            if alist[i] > alist[i+1]:
                alist[i], alist[i+1] = alist[i+1], alist[i]
    return alist
冒泡排序算法的优化

添加一个标识来判断原序列(或剩余部分)是否已有序
代码如下:

def bubble_sort2(alist):
    """冒泡排序"""
    for j in range(1, len(alist)):
        # 外循环控制总轮数(n-1)轮
        count = 0 # 是否有序,如果为0,则表示序列已有序
        for i in range(0, len(alist)-j):
            # 内循环控制每轮数据比较次数
            if alist[i] > alist[i+1]:
                alist[i], alist[i+1] = alist[i+1], alist[i]
                count += 1
        if 0 == count:
            return
    return alist
冒泡排序算法的时间复杂度与稳定性
  • 最优时间复杂度:O(n) (n指优化后算法内循环的遍历次数 n )
  • 最坏时间复杂度:O(n2)
  • 稳定性:稳定(即排序中不会改变相同元素的顺序)

排序算法的稳定性是指在排序的过程中不会改变相同元素彼此的位置的相对次序,反之不稳定的排序算法经常会改变这个次序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值