zoukankan      html  css  js  c++  java
  • 交换排序-冒泡排序

    冒泡排序

    这个系列是回顾之前所学,是用python商量着完成的。

    路过的大佬就当看个乐,实现算法的方式不一,也有讨巧的做法。

    我只讲讲我的思路,希望大家浏览的时候能多多提建议,共同学习共同进步。

    --------------------------------------------------------------------------------------------------------

    冒泡排序算法的原理如下:

    比较相邻的元素。如果第一个比第二个大,就交换他们两个。

    对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。

    持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

    先举个例子:

    [5, 4, 3, 2, 1] 用冒泡排序实现

    第一次排序:[4, 3, 2, 1, 5]

    第二次排序:[3, 2, 1, 4, 5]

    第二次排序:[2, 1, 3, 4, 5]

    第四次排序:[1, 2, 3, 4, 5]

    刚开始指针指向 ‘5’,依次与后面的四个元素作比较,小就交换,大就不动了,然后将指针向前移一位指向第二个元素继续前面的步骤,当执行到第四次,就不用排序了。

    怎么说?

       这时的第一个数不用想,肯定是最小的,那就是说一共有五个元素,排序次数为4次,在此基础上抽象一点就是:有n个元素,排序次数就是n-1次

    根据上面的思路,我们用python代码结合迭代尝试实现:

     1 def bubble_sort(list):
     2     for i in range(0, len(list)-1):
     3         flag = 0
     4         for j in range(0, len(list)-1-i):
     5             if list[j] > list[j+1]:
     6                 list[j+1], list[j] = list[j], list[j+1]
     7                 flag += 1
     8         if flag == 0:
     9             return list
    10 
    11     return list

    第一个循环是执行排序次数是多少,应该为n-1次

    第二个循环是数组中内部元素之间的比较,每次排好序列的元素就不需要再去动它了,所以每次排序完成之后只需要在剩下的元素中排序就行了

    这里做了一点点优化,当传入的数组已经是降序序列时,不会执行第二个循环的内容,则flag为0,直接输出结果,将flag放入循环内部是每次调用都会重新初始化flag,不会出现累加的情况。

    那么下个快速排序再见。





  • 相关阅读:
    2019春总结
    2019春第一周编程总结
    第十二周
    2019春第七周编程总结
    2019春第四周作业
    人生路上对我影响最大的三位老师
    第五周课程总结&试验报告(三)
    第四周课程总结&试验报告(二)
    第三周课程总结&实验报告一
    第二周java学习总结
  • 原文地址:https://www.cnblogs.com/PurpleRain98/p/13587819.html
Copyright © 2011-2022 走看看