冒泡算法是基于比较和交换的排序算法,它的基本思想是通过多次遍历待排序序列,每次遍历都将相邻的元素进行比较,如果顺序不符合要求(通常是升序或降序)就交换它们的位置。
以升序排序为例,从数组的第一个元素开始,依次比较相邻的两个元素。如果前一个元素大于后一个元素,就交换它们的位置。这样,在一次遍历结束后,数组中最大的元素就会“浮”到数组的末尾。然后对除了最后一个元素之外的其余元素重复上述过程,直到整个数组都有序为
1. 时间复杂度
- 最好情况:当数组已经是有序的时候,只需要进行一次遍历,比较n - 1次,没有交换操作,时间复杂度为O(n)。
- 最坏情况:数组是逆序的,需要进行n - 1次遍历。第一次遍历需要比较n - 1次,第二次遍历需要比较n - 2次,以此类推,最后一次遍历比较1次。总的比较次数为1 + 2 + \cdots + (n - 1) = \frac{n(n - 1)}{2},时间复杂度为O(n^{2})。
- 平均情况:平均情况下,冒泡算法的时间复杂度也是O(n^{2}),因为大部分情况下数组既不是完全有序也不是完全逆序,比较和交换的次数接近最坏情况。止。