zoukankan      html  css  js  c++  java
  • 利用Python进行冒泡排序

    # -*- coding:utf-8 -*-
    
    ## 冒泡排序解析
    """
    冒泡排序的必备知识:
    互换位置 用temp临时变量
    a1 = 456
    a2 = 123
    
    temp = a1
    a1 = a2
    a2 = temp
    
    print(a1)
    print(a2)
    
    Python中可以不使用中间变量temp。直接可以进行互换位置。
    a1 = 456
    a2 = 123
    
    if a1 > a2:  # 如果a1 比 a2 大,那么 交换位置
        a1, a2 = a2, a1 # 运用到多变量赋值,用元组分隔。括号可以去除
    print(a1, a2)
    
    # 冒泡排序原理
    
    1       1       1       33
    
    10     10       33      1
        》       》       》
    2      33       10      10
    
    33      2       2       2
    
    上面是4个数。通过依次的从下面两个数开始比较,再与上面比较,得出最大的值,将最大的值放在最上面的位置,这就是冒泡。
    33和2 先排序。利用的就是上面的那个基础知识。那么2在下面,33在上面。然后33和10再进行比较。最大的放上面,最小的放下面。。。。。
    最后找到了33是最大值。该值为最大。放到了最上面。通过一系列的比较。33是最大的放在上面了。
    
    然后再次操作步骤和上面一样,再进行最下面两个比较,依次比较。将最大的第二个数放到最上面。
    33      33
    
    1       10
        》
    10      1
    
    2       2
    
    这次将最大的第二位数10找到了。
    继续比较。。。
    33      33
    
    10      10
        》
    1       2
    
    2       1
    
    这就是最终的结果,这就是应用的冒泡排序原理进行排序。
    
    
    -------------
    
    
    li = [33, 2, 10, 1]
    使用冒泡排序,将列表从小到大排序;
    
    下面用代码实现:
    """
    
    li = [33, 2, 10, 1]  # 这是一个列表。长度为len(li)
    print(li)
    
    for i in range(len(li) - 1):
        #                           i = 0    1    2     3
        # current_value: li[i]          33   2    10    1
        # next_value:    li[i + 1]      2    10   1     无值了,导致数组越界。因此range(len(li) - 1)
        # print(i, li[i], li[i+1])
        if li[i] > li[i + 1]:
            temp = li[i]
            li[i] = li[i + 1]
            li[i + 1] = temp
    print(li)  # 这次将最大的值33 取出了 放到了最后。
    # 33最大的取出来了,li = [2, 10, 1, 33] ;现在还有再进行排序。将前三个值进行分别冒泡排序。那么就是 for i in range(len(li) - 2)
    
    for i in range(len(li) - 2):
        if li[i] > li[i + 1]:
            temp = li[i]
            li[i] = li[i + 1]
            li[i + 1] = temp
    print(li)  # 这次将第二大的的值33 取出了倒数第二位。
    # 10第二大的取出来了, li = [2, 1, 10, 33], ;现在还有再进行排序。将前两个值进行分别冒泡排序。那么就是 for i in range(len(li) - 3)
    
    for i in range(len(li) - 2):
        if li[i] > li[i + 1]:
            temp = li[i]
            li[i] = li[i + 1]
            li[i + 1] = temp
    print(li)
    # 这里就结束了,因为只有最后两个数 1 和 2 进行比较了。
    
    
    # 总结上面的代码过程。唯一的区别在于for i in range(len(li) - 【1、2、3】) 这里的不同。那么就可以再在外面做个循环。
    # li 的长度为len(li);上面len(li)个数排序进行了 -1 -2 -3 三次的过程。那么外层循环可以用 for j in range(1, len(li)) 即可。
    

    冒泡排序最终表达式

    li = [22, 31, 82, 35, 333, 2, 62, 78, 24, 6, 23, 4, 8, 88, 5, 42, 21, 233, 1232, 165, 121, 2480, 82, 12, ]

    for j in range(1, len(li)):
        for i in range(len(li) - j):
            if li[i] > li[i + 1]:
                temp = li[i]
                li[i] = li[i + 1]
                li[i + 1] = temp
    print(li)
    

    或者

    for j in range(1, len(li)):
        for i in range(len(li) - j):
            if li[i] > li[i + 1]:
                li[i], li[i + 1] = li[i + 1], li[i]  # Python可以不使用中间变量temp,直接可以互换位置。括号可以去除
    print(li)
    
  • 相关阅读:
    Html笔记(四)图像
    Html笔记(三)列表
    Html笔记(二)字体
    Html笔记(一)概述
    mysql基础~经典题目
    MGR架构~原理细节分析(8.0最新版)
    hiveserver2
    恋爱心理
    和谐之道
    智者遇事求心,庸者遇事求境
  • 原文地址:https://www.cnblogs.com/a72hongjie/p/8988716.html
Copyright © 2011-2022 走看看