1、算法描述
依次比较相邻的数剧,将小的数排前面,大的排后面。
操作步骤
(1)、从第一个元素开始,依次与后一个数比较,小数放前,大数放后,结果是最大的放到了最后。
(2)、对前n-i个数重复(1),i从1至n-2,n为原序列大小。
2、图例
3、代码
public void sort(int[] data) {
for (int i = data.length - 1; i > 0; i--) {
for (int j = 0; j < i; j++) {
if (data[j + 1] < data[j])
swap(data, j, j + 1);
}
}
}
4、稳定性及复杂度
稳定性:冒泡排序是稳定的排序
平均时间复杂度:O(n^2)
原始的冒泡排序不管初始序列怎样都需要经过n(n-1)/2次比较,如果序列为上升序列,则交换次数为0,反之为下降序列则交换次数为n(n-1)/2次。通过使用标志位来标志上一次比较是否有交换发生,可以减少上升序列的比较次数为n-1次。
空间复杂度:O(1)
//ps:变种的冒泡排序(局部冒泡,双向冒泡等)这里就不一一 说了