Python 算法之冒泡排序

冒泡排序基本思想

对于列表a依次比较两个相邻元素的大小,若a[j]大于a[j+1]则进行交换,第一趟把最大的数换到最后,依次类推生成有序的列表。
N个元素的列表要排序完成,需N-1趟排序(例:如果N是3(a = [10,5,2]),那么需要2趟依次把10和5进行移动生成有序列表[2,5,10])。
每一趟排序,就会少比较一次,因为每进行一趟排序都会找出余下列表中的一个较大值
每i趟的排序次数为(N-i-1)次,可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数。

冒泡排序默认升序排列,如果需要降序则把内层循环中的>号改成<号

a = [10,5,2,4,1,0]
c = 0
print("        %s" % a)
for i in range(len(a)-1):
    print("Outer Loop:%d" % i)
    for j in range(len(a)-1-i):
        print("    Inner Loop:%d" % j)
        if a[j] > a[j+1]:
            a[j+1], a[j] = a[j], a[j+1]
        print("        %s" % a)
        c += 1
print(c)

输出结果:

        [10, 5, 2, 4, 1, 0]
Outer Loop:0
    Inner Loop:0
        [5, 10, 2, 4, 1, 0]
    Inner Loop:1
        [5, 2, 10, 4, 1, 0]
    Inner Loop:2
        [5, 2, 4, 10, 1, 0]
    Inner Loop:3
        [5, 2, 4, 1, 10, 0]
    Inner Loop:4
        [5, 2, 4, 1, 0, 10]
Outer Loop:1
    Inner Loop:0
        [2, 5, 4, 1, 0, 10]
    Inner Loop:1
        [2, 4, 5, 1, 0, 10]
    Inner Loop:2
        [2, 4, 1, 5, 0, 10]
    Inner Loop:3
        [2, 4, 1, 0, 5, 10]
Outer Loop:2
    Inner Loop:0
        [2, 4, 1, 0, 5, 10]
    Inner Loop:1
        [2, 1, 4, 0, 5, 10]
    Inner Loop:2
        [2, 1, 0, 4, 5, 10]
Outer Loop:3
    Inner Loop:0
        [1, 2, 0, 4, 5, 10]
    Inner Loop:1
        [1, 0, 2, 4, 5, 10]
Outer Loop:4
    Inner Loop:0
        [0, 1, 2, 4, 5, 10]
15
冒泡算法时间复杂度:
最优时间复杂度O(n) :正序情况,只需要一次外层循环,n-1次比较
最坏时间复杂度O(n2):逆序情况,需要n-1一次外层循环,每i趟外层循环执行n-1-i次内层循环
posted @ 2021-01-03 16:04  船长博客  阅读(601)  评论(0编辑  收藏  举报
永远相信美好的事情即将发生!