冒泡排序是一种基于比较和交换操作的排序算法。 每轮冒泡的过程都是从第一个元素开始,将该元素和相邻下一个元素进行比较和交换,使得较大的元素向右移动(如果该元素大于下一个元素,则两个元素交换;如果该元素小于等于下一个元素,则保持不变)。这样一来,每轮冒泡的过程都可以确定一个元素放在正确的位置上,而这个元素就是剩余元素中最大的元素,正确的位置就是剩余位置中的最右侧的位置。这个过程就像是气泡上浮一样,所以叫做冒泡排序。
分析:
1、冒泡排序是原地排序算法
因为冒泡排序过程中并不需要开辟新的数组空间,只需要常数个变量用于标记或者交换,所以冒泡排序是原地排序算法。
2、冒泡排序是稳定排序算法
在比较交换操作过程中,如果第一个元素大于第二个元素,我们才交换两个元素,两个元素相等时,保持不变。所以两个相等的元素在排序前后的相对位置并不会发生变化,所以冒泡排序是稳定排序算法。
时间复杂度是O(n2)
最好情况
此时数组本身已经有序,冒泡排序只需要一轮就可退出,时间复杂度为O(n)
最坏情况
此时数组本身是逆序的,完成冒泡排序需要n轮,比较的次数为n+(n-1)+(n-2)+...+2+1,时间复杂度为O(n2)
平均情况
鉴于对最坏情况下的时间复杂度分析,得出平均情况下的时间复杂度为O(n2)。