当前位置 博文首页 > m0_48462648的博客:python中的三种排序方法,使用冒泡对列表排

    m0_48462648的博客:python中的三种排序方法,使用冒泡对列表排

    作者:[db:作者] 时间:2021-08-09 15:56

    本文章属于转载,但是再最后的冒泡教程中,我写了自己的理解以及自己的一些建议,有什么不懂得,可以直接留言问我!

    本文章转载于csdn,原作者:f_chenchen;点击链接即可跳转!
    点击

    对列表的数据进行排序:
    方法一:
    直接用列表自带函数排序,.sort()方法默认升序,将参数reverse改为True,改为降序:

    list = [7, 4, 3, 67, 34, 1, 8]
    list.sort()
    print(list)
    
    [1, 3, 4, 7, 8, 34, 67]
    list.sort(reverse = True)
    print(list)
    
    [67, 34, 8, 7, 4, 3, 1]
    

    方法二:

    for循环,从list中取最小值,插入到一个空列表(用append默认插入列表最后边),然后把原列表中的最小值删除,再次取最小值,循环len(list)次。如果要求倒序,把min改为max即可:

    list = [7, 4, 3, 67, 34, 1, 8]
    a= []
    for i in range(len(list)):
        a.append(min(list))
        list.remove(min(list))
    print(a)
    
    [1, 3, 4, 7, 8, 34, 67]
    

    方法三:

    冒泡排序:从小到大,比较相邻的元素,如果前一个比后一个大,交换之。
    a是外层,轮,b是内层,次
    len(list) = 7
    第一轮:
    a = 0
    b in range(6),循环执行6次
    第一次 4,7比较,比较后[4,7, 3, 67, 34, 1, 8]
    第二次 7,3比较,比较后[4,3, 7, 67, 34, 1, 8]
    ……
    第六次 8,67比较,比较后[4, 3, 7, 34, 1, 8, 67]

    第二轮:
    a = 1
    b in range(5),循环执行5次(因为在第一轮已经将最大值67判断出来,不用再和67做比较)
    第一次 4,3比较,比较后[3, 4, 7, 34, 1, 8, 67]
    第二次 4,7比较,比较后[3, 4, 7, 34, 1, 8, 67]
    第五次34,67比较,比较后[3, 4, 7, 1, 8, 34, 67]

    第三轮:
    a = 2
    b in range(4),循环执行4次,34,67的顺序已经比较出来
    第一次3,4比较,比较后[3, 4, 7, 1, 8, 34, 67]
    第二次4,7比较,比较后[3, 4, 7, 1, 8, 34, 67]
    第三次7,1比较,比较后[3, 4, 1, 7, 8, 34, 67]
    第四次7,8比较,比较后[3, 4, 1, 7, 8, 34, 67]

    第四轮:
    a = 3
    b in range(3),循环执行3次,8,34,67的顺序已经比较出来
    第一次3,4比较,比较后[3, 4, 1, 7, 8, 34, 67]
    第二次4,1比较,比较后[3, 1, 4, 7, 8, 34, 67]
    第三次4,7比较,比较后[3, 1, 4, 7, 8, 34, 67]

    第五轮:
    a = 4
    b in range(2),循环执行两轮7,8,34,67的顺序已经比较出来
    第一次3,1比较,比较后[1, 3, 4, 7, 8, 34, 67]
    第二次3,4比较,比较后[1, 3, 4, 7, 8, 34, 67]

    第六轮
    a = 5
    b in range(1),循环执行一轮,4, 7, 8, 34, 67的顺序已经比较出来
    第一次,1,3比较,比较后[1, 3, 4, 7, 8, 34, 67]

    此时,轮和次都循环完毕,排序完成
    从大到小的顺序,把 if list[b] > list[b+1]改为if list[b] < list[b+1]即可

    list = [7, 4, 3, 67, 34, 1, 8]
    for a in range(len(list)):
        for b in range(len(list)-a-1):
            if list[b] > list[b+1]:
                list[b+1],list[b]=list[b],list[b+1]
    print(list)     
    
    

    自己得理解:

    #使用冒泡方法进行排序!
    #资料、学生的成长档案!
    test1 = [2,56,1,767,33,88,22]
    for i in range(len(test1)):#这个是一共循环7次,从零开始,一直到7
        #第一次运行,a是零。次数是6
        #第二次运行,a是1;次数是6
        #但是由于第一次的数字换到了第二个数,第二个数往再根据后面坐标a+1,进行比对
        #第二个for循环体结束,一个数的位置:
        #这个是无法用言语表达,建议各位兄弟不要急,有时间就看看,就算暂时没懂,也没事
        #多看看视频教学,看不同老师的讲解
        #我看了两三天才会,过来人经验,不要急!!
        #第二个循环体结束后,会再次执行第一个for,i变成了1
        #然后再次执行第二个for,此时第二个就变成了for i in range(5)),因为最大数经过第一轮的运行,已经确定了最大数
        for a in range(len(test1)-i-1):#这个第一次执行就循环6次,因为要进行6次比对,然后比过之后就不用再比,就减去每次执行的i
            if test1[a]>test1[a+1]:
                test1[a],test1[a+1]=test1[a+1],test1[a]
    print(test1)
    
    cs