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

    核心算法:

    在数组x[n]中,从第一个数开始,拿x[i]和后面的数x[i+1]进行比较,如果x[i]比后面的大,就交换两个数的位置,这样遍历一遍数组后,把最大的数据排在了最后面,之后继续循环排剩下的n-1个数,

    直到完成所有的排序,由于每次都是把最大的排到最后面,就好像冒泡一样,故取名冒泡排序。

    详细讲解:

    里层for循环的逻辑:

    第一步:从第一个元素开始,与第二个元素比较,如果小于,则交换两个元素的位置,否则不交换位置。

    第二步:从第二个元素和第三个元素比较,如果小于,则交换两个元素的位置,否则不交换位置。

    类似第一步和第二步的过程,实现第三元素和第四元素比较、第四元素和第五元素比较。。。。。

    第N步:倒数第二个元素和最后一个比较。

    全部比较之后,整个列表中最大的元素就找到了。

    外层for循环的逻辑:

    第一步到第N步

    然后,重复第一步到N-1步的过程,可以找到第二大的数字

    然后,重复第一步到N-2步的过程,可以找到第三大的数字

    然后,重复第一步到N-3步的过程,可以找到第四大的数字

    。。。。。。。

    最后,重复第一步的过程(即:N-(N-2)),找到第N-1大的数字

    代码示例如下:

    s=[4,3,1,9,10,6,2,7,5,8] 
    for i in range(len(s)-1):
    for j in range(len(s)-1-i):
    if s[j]>s[j+1]:
    s[j],s[j+1]=s[j+1],s[j]
    print(s)

    代码思路:
    # 第一次循环结果:[3, 1, 4, 9, 6, 2, 7, 5, 8, 10],找到最大的数字
    # 第二次循环结果:[1, 3, 4, 6, 2, 7, 5, 8, 9, 10],找到第二大的数字
    # 第三次循环结果:[1, 3, 4, 2, 6, 5, 7, 8, 9, 10],找到第三大的数字
    # 第四次循环结果:[1, 3, 2, 4, 5, 6, 7, 8, 9, 10],找到第四大的数字
    # 第五次循环结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],找到第五大的数字
    # 第六次循环结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],找到第六大的数字
    # 第七次循环结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],找到第七大的数字
    # 第八次循环结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],找到第八大的数字
    # 第九次循环结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],找到最小的数字
    从以上解析过程可以看到,在循环第5次后列表数字已排好序

     
  • 相关阅读:
    (原)Lazarus 异构平台下多层架构思路、DataSet转换核心代码
    (学)新版动态表单研发,阶段成果3
    (学) 如何将 Oracle 序列 重置 清零 How to reset an Oracle sequence
    (学)XtraReport WebService Print 报错
    (原)三星 i6410 刷机 短信 无法 保存 解决 办法
    (原) Devexpress 汉化包 制作工具、测试程序
    linux下网络配置
    apache自带ab.exe小工具使用小结
    Yii::app()用法小结
    PDO使用小结
  • 原文地址:https://www.cnblogs.com/ssj0723/p/9516472.html
Copyright © 2011-2022 走看看