交换排序-冒泡排序

冒泡排序

 

这个系列是回顾之前所学,是用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,不会出现累加的情况。

 

那么下个快速排序再见。





 

posted @ 2020-08-31 09:07  蒜泥迪奥  阅读(138)  评论(0编辑  收藏  举报