认识冒泡排序
冒泡排序是最基础的排序算法,英文是 bubble sort,它是一种基础的交换排序。冒泡排序这种排序算法的每一个元素都可以像小气泡一样,根据自身大小,一点一点地向着数组的一侧移动。
我们要把相邻的元素两两比较,当一个元素大于右侧相邻元素时,交换它们的位置;当一个元素小于或等于右侧相邻元素时,位置不变。
经过第一轮后:
元素 9 作为数列中最大的元素,就像是汽水里的小气泡一样,“漂”到了最右侧
每一轮结束都会有一个元素被移到最右侧
代码实现冒泡排序
public class BubbleSort {
public static void main(String[] args) {
int[] nums = new int[]{1,2,4,5,67,77,89,23,21,12};
for (int i = 0; i < nums.length -1; i++) {
for (int j = 0; j < nums.length -1-i; j++) {
// 临时变量,用于交换位置
int tmp =0;
if(nums[j] > nums[j+1]){
tmp = nums[j];
// 交换位置
nums[j] = nums[j+1];
nums[j+1] = tmp;
}
}
}
for (int n: nums) {
System.out.println(n);
}
}
}
代码优化
外层循环优化
在外层循环出、设置一个标识 isSort,默认为排好,如果不交换则跳出本次循环
内层循环优化
已经被移到右侧的元素不用再参与比较了(冒泡 是把大的移到最右边)
public class BubbleSort {
public static void main(String[] args) {
int[] nums = new int[]{5,6,7,2,7,88,9,33,232};
for (int i = 0; i < nums.length -1; i++) {
// 默认排序排好了
boolean isSort = true;
for (int j = 0; j < nums.length -1-i; j++) {
// 临时变量,用于交换位置
int tmp =0;
if(nums[j] > nums[j+1]){
// 需要交换 则 isSort = false
isSort =false;
tmp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = tmp;
}
}
// 排好了跳出循环
if(isSort){
break;
}
}
for (int n: nums) {
System.out.println(n);
}
}
}
时间复杂度:O(n*2)