抽空帮数据结构和算法相关的东东整理一下,重新整理也是一次进步的过程,加油!
冒泡排序
思路:
1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3. 针对所有的元素重复以上的步骤,除了最后一个。
4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
代码:
下面以数列(3,2,4,9,1,5,7,6,8)为例,演示它的冒泡排序过程(如下图)。
我们先分析第1趟排序
3,2,4,9,1,5,7,6,8
第一次 2 3 4 9 1 5 7 6 8
第二次 2 3 4 9 1 5 7 6 8 不做交换
第三次 2 3 4 9 1 5 7 6 8 不做交换
第四次 2 3 4 1 9 5 7 6 8
第五次 2 3 4 1 5 9 7 6 8
第六次 2 3 4 1 5 7 9 6 8
第七次 2 3 4 1 5 7 6 9 8
第八次 2 3 4 1 5 7 6 8 9
于是,第1趟排序完之后,数列(3,2,4,9,1,5,7,6,8)变成了(2,3,4,1,5,7,6,8,9)。此时,数列末尾的值最大。
细心的人,看上面的演示图,会发现,三趟趟比较之后,数据已经是有序排列了,之后的排序显得有点多余,那么有没有好的方法来避免这种现象来,答案是肯定的
我们研究第四趟比较,发现整个比较下来,居然没有发生一次交换,所以,我们可以以此修改程序
在冒泡排序中,最重要的思想是两两比较,将两者较少的升上去
假设被排序的数列中有N个数。遍历一趟的时间复杂度是O(N),需要遍历多少次呢?N-1次!因此,冒泡排序的时间复杂度是O(N2)。
完整版:
如果觉得还行 可关注微信公众号Deverloper_Taoists