A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

文章目录


效率:O(n2)
原理:

比较相邻的元素,如果第一个比第二个大,就交换他们两个;

对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。做完以后,最后的元素会是最大的数,这里可以理解为走了一趟;

针对所有的元素重复以上的步骤,除了最后一个;

持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较,最后数列就是从大到小一次排列;

demo:

def bubble_sort(data):
    """
    冒泡排序
    :param data:
    :return:
    """
    for i in range(len(data)-1):  # 趟数
        for j in range(len(data)-i-1):  # 遍历数据,依次交换
            if data[j]>data[j+1]:  # 当较大数在前面
                data[j],data[j+1]=data[j+1],data[j] #交换两个数的位置

if __name__=='__main__':
    import random
    data_list=list(range(30))
    random.shuffle(data_list)
    print("pre:",data_list)
    bubble_sort(data_list)
    print("after:",data_list)
#结果:
#pre: [22, 11, 19, 16, 12, 18, 20, 28, 27, 4, 21, 10, 9, 7, 1, 6, 5, 29, 8, 0, 17, 26, 13, 14, 15, 24, 25, 23, 3, 2]
#after: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]

优化版本:当某一趟走完以后发现并没有进行数据交换,那么此时的数列已经排列好了,没有必要在进行下去。例如:极端情况下,数列本来已经排序好的,我们只需要走一趟即可完成排序。

def bubble_sort(data):
    """
    冒泡排序优化版
    :param data:
    :return:
    """
    for i in range(len(data)-1):  # 趟数
        exchange=False   # 交换标志
        for j in range(len(data)-i-1):  # 遍历数据,依次交换
            if data[j]>data[j+1]:  # 当较大数在前面
                data[j],data[j+1]=data[j+1],data[j]  # 交换两个数的位置
                exchange = True  # 改变标志
        if not exchange: # 如果某一趟没有进行交换,代表排序完成
            break
    return i  # 返回次数的趟数

if __name__=='__main__':
    data_list=list(range(30))
    print("pre:",data_list)
    num =bubble_sort(data_list)
    print("after:",data_list,'趟数:',num+1)
#结果:
#pre: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
#after: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29] 趟数: 1

---------------------
【转载,仅作分享,侵删】
作者:Mr Cui
原文:https://blog.csdn.net/cui130/article/details/86499853
版权声明:本文为博主原创文章,转载请附上博文链接!

1 个回复

倒序浏览
今天也要加油鸭
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马