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

    #冒泡排序:从第一个元素开始,每两个元素进行比较,当第一个元素大于第二个元素,两个元素位置交换,否则不变,全部比较之后整个元素中最大的元素就找到了

    a=[3,5,1,7,2,8,3,9,0]
    分析:
    第一步:3>5不成立,3,5位置不变--->>[3,5,1,7,2,8,3,9,0]

    第二步:5>1成立,5,1位置交换--->>[3,1,5,7,2,8,3,9,0]

    第三步:5>7不成立,5,7位置不变--->>[3,1,5,7,2,8,3,9,0]

    第四步:7>2成立,7,2位置交换--->>[3,1,5,2,7,8,3,9,0]

    第五步:7>8不成立,7,8位置不变--->>[3,1,5,2,7,8,3,9,0]

    第六步:8>3不成立,8,3位置交换--->>[3,1,5,2,7,3,8,9,0]

    第七步:8>9不成立,8,9位置不变--->>[3,1,5,2,7,3,8,9,0]

    第八步:9>0成立,9,0位置交换--->>[3,1,5,2,7,3,8,0,9]

    '''

    #找到一个最大的元素:

    for j in range(len(a)-1):
        if a[j]>a[j+1]:
            a[j],a[j+1] = a[j+1],a[j]
        print(a)
    
    print("****")
    print(a)

    E:>py -3 a.py
    [3, 5, 1, 7, 2, 8, 3, 9, 0]
    [3, 1, 5, 7, 2, 8, 3, 9, 0]
    [3, 1, 5, 7, 2, 8, 3, 9, 0]
    [3, 1, 5, 2, 7, 8, 3, 9, 0]
    [3, 1, 5, 2, 7, 8, 3, 9, 0]
    [3, 1, 5, 2, 7, 3, 8, 9, 0]
    [3, 1, 5, 2, 7, 3, 8, 9, 0]
    [3, 1, 5, 2, 7, 3, 8, 0, 9]
    ****
    [3, 1, 5, 2, 7, 3, 8, 0, 9]

    #找到倒数第二大的元素:

    重复上面的逻辑到N-1步:---->>[3, 1, 5, 2, 7, 3, 8, 0, 9]最后一个位置已经找到了列表中的最大元素,下次比较的时候可以把该元素剔除比较

    #找到倒数第三大的元素:

    重复上面的逻辑到N-2步:---->>[1, 3, 2, 5, 3,7, 0, 8, 9]倒数第二个位置已经找到了倒数第二大的元素,下次比较的时候可以把倒数第二大元素剔除比较

    。。。。以此类推,每次循环剔除最后一个元素即可

    代码实现:

    for i in range(len(a)):
        for j in range(len(a)-1-i):   #里层循环每次循环剔除一个元素,即-i
            if a[j]>a[j+1]:
                a[j],a[j+1] = a[j+1],a[j]  #如果前一个元素大于后一个元素则交换两个元素
            #print(a)
    
    
    print("****")
    print(a)

    E:>py -3 a.py
    ****
    [0, 1, 2, 3, 3, 5, 7, 8, 9]

    时间复杂度计算:

    当我们遍历第1遍时,比较了n-1(第一个元素本身不用跟自己比较,所以是n-1)次,把最大的数排在了x[n-1]的位置;

    第2遍比较了n-2次,把第二大的数排在了x[n-2]的位置;

    ............

    第n-1遍比较了1次,把倒数第二大的数排在了x[1]的位置。

    这样,我们总共比较的次数是1+2+3+...+(n-1) = n(n-1)/2

    在计算时间复杂度时,我们一般使用的大表示法,其时间复杂度,从小到大的排序是:

    (1)<(logn)<(n)<(nlogn)<(n^2)<...<(2^n)<(n!)

    我们上面所求得的n(n-1)/2,其时间复杂度,最大的影响因子是n^2,故其时间复杂度是(n^2)

  • 相关阅读:
    子序列自动机学习笔记
    P4709 信息传递 解题报告
    斯坦纳树学习笔记
    NOIP2021 游记
    P5206 [WC2019]数树 解题报告
    CF1205D Almost All 解题报告
    设计模式原来如此策略模式(Strategy Pattern)
    再次站起,继续开博
    Java原来如此反射机制
    Java原来如此随机数
  • 原文地址:https://www.cnblogs.com/wenm1128/p/11765154.html
Copyright © 2011-2022 走看看