思想:
基于交换的排序算法。从第一个元素开始,依次与相邻的元素进行比较,如果大小顺序错误,就将他们交换。每一趟交换后可以确保一个最大数(最小数)已经到最终的位置,比如:第一趟比较结束后,最后一个数一定是最大数(从小到大排序)
代码实现
public static void bubbleSort(int[] arr){
for (int i = 0;i < arr.length-1;i++){
for (int j = 0;j < arr.length-1-i;j++){
if (arr[j] > arr[j+1]){
swap(arr,j,j+1);
}
}
}
}
优化:
思想:当某一趟排序过程中没有发现一次元素的交换,则证明此时序列已经有序了,不用再进行多余比较。
代码实现:
if (arr.length<=1){
return ;
}else {
for (int i = 0;i < arr.length-1;i++){
boolean flag = false;
for (int j = 0;j < arr.length-1-i;j++){
if (arr[j] > arr[j+1]){
swap(arr,j,j+1);
flag = true;
}
}
if (!flag){
break;
}
}
}
}
分析:
稳定性:当出现相邻元素相等时不进行交换,稳定
时间复杂度:每趟排序只能使得一个元素有序,每一趟都要遍历数组元素,所以是O(n^2)
空间复杂度:没有开辟新的空间,仅仅是几个变量,所以O(1)