å泡æåºçæä½³æ¶é´å¤æ度æ¯O(n)ï¼å³æ¯å¨åºåæ¬æ¥å°±æ¯æ£åºçæ åµä¸ã
å¨æ好æ åµä¸ï¼6å7æ»ä¸è¢«æ§è¡ï¼5æ¯æ¬¡åªè¢«æ§è¡1次ãå æ¤ï¼
冒泡排序的基本思想是,对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序
代码实现
在冒泡排序的过程中,如果某一趟执行完毕,没有做任何一次交换操作,比如数组[5,4,1,2,3],执行了两次冒泡,也就是两次外循环之后,分别将5和4调整到最终位置[1,2,3,4,5]。此时,再执行第三次循环后,一次交换都没有做,这就说明剩下的序列已经是有序的,排序操作也就可以完成了,来看下代码
/**根据上面这种冒泡实现,若原数组本身就是有序的(这是最好情况),仅需n-1次比较就可完成;若是倒序,比较次数为 n-1+n-2+...+1=n(n-1)/2,交换次数和比较次数等值。所以,其时间复杂度依然为O(n2)。综合来看,冒泡排序最好时间复杂度为是O(n).
冒泡排序的最好时间复杂度为O(n),但原始算法是达不到的,需要做简单优化,在外层循环中加入flag量进行判断——若本轮遍历没有发生任何一次交换,则终止循环。
具体实现参考如下(JS)
function bubbleSort(arr) {更详细的解释可参考——冒泡排序优化(T-T欢迎关注我的博客,多多指教,嘤嘤嘤)