zoukankan      html  css  js  c++  java
  • 算法之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

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

  • 相关阅读:
    CCF真题之Z字形扫描
    CCF真题之门禁系统
    A
    安装 Spring 框架库
    安装 Apache Commons Logging API步骤
    Manven下载
    669. 修剪二叉搜索树
    UnixLinux | 总结笔记 |文件系统
    561. 数组拆分 I
    620. 有趣的电影
  • 原文地址:https://www.cnblogs.com/lishi-jie/p/9911820.html
Copyright © 2011-2022 走看看