算法之LOWB三人组之冒泡排序

排序

冒泡排序(Bubble Sort)时间复杂度为O(n^2)

列表每两个相邻的数,如果前面比后面大,则交换这两个数
一趟排序完成后,则无序区减少一个数,有序区增加一个数。

def bubble_sort(li):
    for i in range(len(li)-1): # i代表的是第几趟,由于最后一趟不需要再走了,所以N-1为需要走多少趟
        for j in range(len(li)-i-1): # j代表的是指针,指向第几个元素,走了几趟,本来剩N-i趟,但是最后一个数字不需要再去比较,所以N-i-1
            if li[j] > li[j+1]:
                li[j], li[j+1] = li[j+1],li[j]

li = [random.randint(1, 100) for i in range(1, 50)]
print(li)
bubble_sort(li)
print(li)

结果如下:
gai

冒泡排序有个可以改良的地方,如果冒泡排序中一趟没有发生变化,则说明列表已经有序,可以直接结束算法

例如:
li = [1, 2, 3, 4, 7, 8, 6, 5]

gai

这个列表在第4趟的时候已经排序结束,但是算法会一直跑完7趟,改良后的冒泡排序

def bubble_sort(li):
    for i in range(len(li)-1):
        exchange = False
        for j in range(len(li)-i-1):
            if li[j] > li[j+1]:
                li[j], li[j+1] = li[j+1], li[j]
                exchange = True
        print(li)
        if not exchange:
            return

gai

明显效率提高了很多是不是?嘿嘿嘿

原文地址:https://www.cnblogs.com/lishi-jie/p/9911820.html