zoukankan      html  css  js  c++  java
  • 排序算法(一)之冒泡排序

    今天咱们把常见的几种排序算法,整理了一下,希望能对正在看这篇帖子的你有轻微的小帮助
    依照惯例,在写每一篇帖子之前,笔者都会遵循以下几点原则:
      1、如果一个什么都不懂的人都能把这篇文章看懂,那就说明这篇博客通俗易懂
      2、尽量保持排版整齐,让读者阅读起来不是那么累,简单舒服即可
      3、尽可能的保证所写的东西是正确的,若能帮到疑惑中的你一点点小作用,是笔者坚持写下去的动力

    一、冒泡排序
    什么是冒泡排序,它的原理是什么?
    有没有一个人能帮我讲明白其中的逻辑?
    最后能不能用代码敲出一个例子?
    如何帮大家回答这三个问题,且看我慢慢叙来。
    冒泡排序:从字面意思上来理解,像气泡一样一个一个的从水底升上来,上面的最大,底部的最小。
    原理就是比较相邻两个元素的大小,小的往前放,大的往后放,每经过一轮排序都可以找出最大的元素出来
    比如:有一个列表【11、9、2、78、45、32、17】,现在开始以这个为例来演示。
    第一轮步骤:①11比9大,所以变成9、11、2、78、45、32、17
          ②11比2大,又变成 9、2、11、78、45、32、17
          ③11比78小,位置不变,开始比较78与45,78比45大,所以变成 9、2、11、45、78、32、17
          ④78比32大,变成 9、2、11、45、32、78、17
          ⑤78比17大,变成 9、2、11、45、32、17、78
        因此,第一轮排序过后,就可以找出78这个最大元素。
          第一轮排序后的列表各元素的位置【9、2、11、45、32、17、78】
    第二轮步骤:①9比2大,位置变成 2、9、11、45、32、17、78
          ②9比11小,位置不变
          ③11比45小,位置不变
          ④45比32大,位置变成 2、9、11、32、45、17、78
          ⑤45比17大,位置变成 2、9、11、32、17、45、78
          ⑥45比78小,位置不变,所以 2、9、11、32、17、45、78
        因此,第二轮排序过后,可以找出第二大的元素45
          第二轮排序后的列表各元素的位置【2、9、11、32、17、45、78】
    第三轮排序:①2比9小,位置不变
          ②9比11小,位置不变
          ③11比32小,位置不变
          ④32比17大,位置变成 2、9、11、17、32、45、78
          ⑤32比45小,位置不变
          ⑥45比78小,位置不变
        因此,第三轮排序后,可以找出第三大的元素32
          所以第三轮排序后的列表各元素的位置 【2、9、11、17、32、45、78】
    因此上面的那个列表经过三轮排序,就可以冒泡升序排列(从小到大排序出来)
    其实,通过上面的例子,原理就是两个相邻的元素取比较大小,大的往右挪,小的往左挪
    再看看下面的代码实现:

    def dubble_sort(list):
        for i in range(1, len(list)):
            for j in range(0, len(list) - i):
                if list[j] > list[j + 1]:
                    list[j], list[j + 1] = list[j + 1], list[j]
        return list
    
    
    li1 = [11, 9, 2, 78, 45, 32, 17]
    
    print(dubble_sort(li1))

     此时,有个同学站了出来,提出一个疑问:难道冒泡排序只能从小到大,不能从大到小吗?

    其实,也可以,即使从大到小排列也是可以的,这里我们只是为了举例,从小到大理解起来较为容易而已,如果你想在此基础上进行降序排列,有个reverse()方法

  • 相关阅读:
    jenkins插件开发
    常用模块-------hashlib (加密模块)
    树莓派在任意无线网下连接笔记本(借用笔记本屏幕)
    常用模块-------时间模块(time/datetime),随机数模块(random)
    pycharm常用的快捷方式及设置
    迭代器
    生成器
    获取行业和概念列表
    钉钉页面扫码登录中hmac加密签名
    获取钉钉开发access_token
  • 原文地址:https://www.cnblogs.com/xj-excellent/p/15541660.html
Copyright © 2011-2022 走看看