深入理解冒泡排序

>> 冒泡排序


冒泡排序可能非你所想。

冒泡排序的思路: 给定一个数组,每次循环出最大的数依次向后排,并将较小的数向前冒。
平均时间复杂度: 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个都冒出来之后,最后一个难道还需要冒吗?大不必要,也没实际效果,你可以理解为,最后一个被挤出来了。


另外一种写法深入理解冒泡排序