以升序为例,冒泡排序每次检查相邻两个元素,如果前面的元素大于后面的元素,就将相邻两个元素交换。当没有相邻的元素需要交换时,排序就完成了。
-ç»\8fè¿\87 $i$ 次æ\89«æ\8f\8få\90\8eï¼\8cæ\95°å\88\97ç\9a\84æ\9c«å°¾ $i$ 项å¿\85ç\84¶æ\9c\89åº\8fï¼\8cå\9b æ¤æ\9c\80å¤\9aé\9c\80è¦\81æ\89«æ\8f\8f $n$ é\81\8dæ\95°ç»\84æ\89\8d能完成排序。
+ç»\8fè¿\87 $i$ 次æ\89«æ\8f\8få\90\8eï¼\8cæ\95°å\88\97ç\9a\84æ\9c«å°¾ $i$ 项å¿\85ç\84¶æ\98¯æ\9c\80大ç\9a\84 $i$ 项ï¼\8cå\9b æ¤æ\9c\80å¤\9aé\9c\80è¦\81æ\89«æ\8f\8f $n-1$ é\81\8dæ\95°ç»\84å°±能完成排序。
在序列完全有序时,该算法只需遍历一遍数组,不用执行任何交换操作,时间复杂度为 $O(n)$ 。在最坏情况下,冒泡排序要执行 $\frac{(n-1)n}{2}$ 次交换操作,时间复杂度为 $O(n^2)$ 。在平均情况下,冒泡排序的时间复杂度也是 $O(n^2)$ 。