• 冒泡排序


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

    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)

  • 相关阅读:
    在oracle中通过connect by prior来实现递归查询!
    c# System.Data.OracleClient需要Oracle客户端软件8.1.7或更高版本
    c# 水晶报表的设计(非常的基础)
    webapi+EF(增删改查)
    简单三层分页aspnetpager控件(欢迎指点)
    listbox 多选删除(找了好多都不行,终于让我写出来了)
    execl导出(HTML,repearter控件)
    SQL Server中截取字符串常用函数
    几个经常用到的字符串的截取
    gridview的增删改
  • 原文地址:https://www.cnblogs.com/wenm1128/p/11765154.html
Copyright © 2020-2023  润新知