深入理解冒泡排序
>> 冒泡排序
冒泡排序可能非你所想。
冒泡排序的思路: 给定一个数组,每次循环出最大的数依次向后排,并将较小的数向前冒。
平均时间复杂度: O(n^2)
最好情况: O(n) 已经排好序
最坏情况: O(n^2) 倒叙的时候
空间复杂度: O(1) 没有占用额外的空间
稳定性: 稳定 排序前相等的两个数,排序后位置不变
: ) 冒泡排序值得注意的是:第一层循环并不参加比较,而仅仅是为了循环计数。
代码如下
- 代码解析:
-
一. 冒泡排序的第一层循环的i,并不会参加排序运算,而仅仅是为了循环计数本身。
-
二. 第一层循环循环一共length-1次,所以当for(int i=1… 那么 i<length ; 当 for (int i=0…那么 i<length-1。
-
三. 第二层c循环的循环数受到第一层循环i的影响,它循环多少次呢?
- 理解:
-
- 冒泡排序先找打最大的,放到最右端。
-
可以这样理解,你不是要排序length个数嘛? 冒泡冒泡,就是要将length个数,挨个儿冒出来,一共length个数,你也应该知道每次咱只能冒一个,那么也就是说要冒length次,真是length次嘛?当然,想法是这样,只是现实的情况是,当你将length-1个都冒出来之后,最后一个难道还需要冒吗?大不必要,也没实际效果,你可以理解为,最后一个被挤出来了。