/**
* 冒泡排序
*/
public static void bubbleSort1(int[] arr){
for (int x=0; x<arr.length-1; x++){
for (int y=0; y<arr.length-1-x ;y++){
if (arr[y]>arr[y+1]){
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
}
}
}
}
冒泡排序优化
就比如说一个有序的数组,那么冒泡排序还是会对它进行比较,只是不交换罢了,所以如果如果比较一轮没有一次交换,那么说明有序,就不要进行比较了。
所以,我们可以通过flag 值,来判断要不要进行遍历。
/**
* 冒泡排序优化版
*/
public static void bubbleSort2(int[] arr){
boolean flag = true;
for (int x=0; x<arr.length-1 && flag; x++){
flag = false;
for (int y=0; y<arr.length-1-x ;y++){
if (arr[y]>arr[y+1]){
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
flag = true;
}
}
}
}
时间复杂度
最优 比较n-1 次 + 交换0 = O(n)
比较n^2 + 交换n^2 = O(n^2)