首页 > 编程语言 > 详细

算法--冒泡排序

时间:2020-05-14 21:37:21      阅读:84      评论:0      收藏:0      [点我收藏+]

算法关键点:

  无序区

  有序区

冒泡排序

列表每两个相邻的数,如果前边的比后边的大,那么交换这两个数……(升序,大的放后面)

技术分享图片

 

 代码关键点:

  • 无序区 (红色表示有序去,白色表示无序区)

python代码实现:

li = [9, 2, 3, 4, 5, 6, 7, 8, 1]


def foo(li):
    for i in range(len(li) - 1):  # 列表长度-1 趟; i 表示第几趟
        for j in range(len(li) - i - 1):  # 无序区的长度 -1; j 表示当前索引,要和后面的j+1索引比较
            if li[j] > li[j + 1]:
                li[j], li[j + 1] = li[j + 1], li[j]


foo(li)
print(li)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

 时间复杂度:O(n2)

 

优化:如果冒泡排序中执行一趟而没有交换,则列表已经是有序状态,可以直接结束算法。

def foo(li):
    for i in range(len(li) - 1):
        exchange = False
        for j in range(len(li) - i - 1):
            if li[j] > li[j + 1]:  # 循环一遍,前面的值都小于后面,说明已经排好了,就执行下面的return
                li[j], li[j + 1] = li[j + 1], li[j]
                exchange = True
        if not exchange:
            return

 

Python的速度 10的7次方 (千万)

C语言大约是Python的10倍

100002次运算次数 Python用时10秒左右, C用1秒左右

算法--冒泡排序

原文:https://www.cnblogs.com/zhzhlong/p/12891193.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!