文章目录
冒泡排序
冒泡排序:
只会操作相邻的两个元素,每次对相邻的两个元素进行大小比较,看是否满足大小要求,一次冒泡至少会让一个元素移动到最终位置。
例如:对一组数 4 5 6 3 2 1,进行从小到大的排序。它的第一次冒泡过程:
可以看出,经过⼀次冒泡操作之后,6 这个元素已经存储在正确的位置上。要想完成所有数据的排序,
我们只要进⾏ 6 次这样的冒泡操作就⾏了。
示例代码如下:
public class BubbleSort {
public static void main(String[] args) {
int [] arr = new int[]{4,5,6,3,2,1};
for (int num : arr){
System.out.print(num+" ");
}
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length-1-i; j++) {
if (arr[j] > arr[j+1]) {
int tmp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = tmp;
}
}
}
System.out.println();
for (int num:arr){
System.out.print(num+" ");
}
}
}
结果如下:
冒泡排序算法的执行效率:
最好情况:
数据集本身就是一个有序集合,O(n)
最坏情况:
据集完全逆序,O(n^2)
平均复杂度:
O(n^2)
算法的内存消耗:
O(1),无需开辟新的空间,仅仅是原有的数据交换,冒泡排序是一个原地排序。
算法的稳定性:
冒泡排序由于相邻元素发生大小关系变换才会交换次序,所以当两个元素大小相等时,并不会改变其相对顺序。(稳定)