原理
也是将最大的数放在数组最后边,和选择排序不一样的是,是将相邻的两个元素作比较,将大的放在最后,重复此步骤,则将数组中最大的元素就放在最后边了
实现
public static void bubbleSort(int[] arr){
//在无序区间将相邻两个数比较,知道数组末尾,则最后一个数就是最大的数
//无序区间:[0,arr.length-i)
//有序区间:[arr.length-i,arr.length)
for(int i = 0;i < arr.length-1;i++){
boolean isSorted = true;
for(int j = 0;j<arr.length-i-1;j++){
//相等不交换,保证稳定性
if(arr[j]>arr[j+1]){
swap(arr,j,j+1);
isSorted = false;
}
}
if(isSorted){
break;
}
}
}
复杂度
当数组有序时,不用交换,当数组逆序时,i 走一下,j 要走 n 下,当 i 走 n 下时,j 走了 n 下,所以时间复杂度是O(N^2)
稳定性
稳定,当数据相等时,没有发生交换,所以是稳定的