zoukankan      html  css  js  c++  java
  • 排序算法:冒泡排序

    冒泡排序的思想:

      遍历列表,从头开始,将相邻的2个数字进行比较,将较大的数字放在右边,这样一趟下来,

      最后一个数字就是这一趟中的最大值,重复上述步骤,

      需要注意的点:

      需要遍历的趟数

      每趟需要交换的次数 (建议画个图) 

    代码:


    def bubblo_sort_simple(li):
        '''原地排序
        '''

        for i in range(len(li) - 1):  # 遍历的趟数, 第几趟.
            for j in range(len(li)- i - 1): # 每趟需要比较的次数
                if li[j] > li[j+1]:
                    li[j], li[j+1] = li[j+1], li[j] 

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

    ## 列表已经排好顺序了
    li = [1,2,3,4,5,6,7,8,9]
    print(li)
    bubblo_sort_simple(li)

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

    冒泡排序代码优化:

    def bubblo_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 li
        
    li = [9,8,7,6,5,4,3,2,1]
    #li = [1,2,3,4,5,6,7,8,9]
    print(li)
    bubblo_sort(li)
    PS E:gitAlgorithm冒泡排序> python .demo.py 
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    PS E:gitAlgorithm冒泡排序> python .demo.py 
    [9, 8, 7, 6, 5, 4, 3, 2, 1]
    [8, 7, 6, 5, 4, 3, 2, 1, 9]
    [7, 6, 5, 4, 3, 2, 1, 8, 9]
    [6, 5, 4, 3, 2, 1, 7, 8, 9]
    [5, 4, 3, 2, 1, 6, 7, 8, 9]
    [4, 3, 2, 1, 5, 6, 7, 8, 9]
    [3, 2, 1, 4, 5, 6, 7, 8, 9]
    [2, 1, 3, 4, 5, 6, 7, 8, 9]
    [1, 2, 3, 4, 5, 6, 7, 8, 9]

    从优化的代码中可以看出,如果序列已经是有序的,只需要运行一趟. (上面的代码默认升序,如果要降序,修改下比较代码)

      

  • 相关阅读:
    下载、安装、编译 QTLtools
    解决方案:使用QTLtools进行表型PCA分析,得到了一堆NA
    报错:terminate called after throwing an instance of 'std::length_error' what(): basic_string::_S_create
    使用 bcftools 进行基因型过滤(genotypes QC)
    使用 QTLtools 进行 PCA 分析
    生物信息学博士后招聘:香港浸会大学张璐博士和卞兆祥教授联合招聘
    Error in getNodeSet(html, path = "//div[@class='plain-box float-right archive-box']")[[1]] : 下标出界
    说说程序员写文档这事
    碎碎念五十
    计算一个服务端方法运行多次的平均耗时(Java)
  • 原文地址:https://www.cnblogs.com/lmt921108/p/14043643.html
Copyright © 2011-2022 走看看