1.冒泡排序
- 冒泡排序只是众多排序算法的一种,用于拓展思维,接近底层
- 其他排序法拓展,二分查找,快速排序,全排序,归并排序等等
- 冒泡排序思路
- 多轮比较,有n个数就需要比较n-1轮;
- 每一轮要进行多次相邻位置比较,如果不符合顺序,位置交换.第i轮就要比较n-i次
- 前一轮排序的最大值不需要参与排序
- 使用for循环实现冒泡排序
- 外层循环代表轮数 n-i轮
- 内层循环代表每轮的比较的次数 i轮就是length-i次
- 优化思路
之前轮的最大值,本轮不参与比较
若数组顺序不是特别混乱,我们可能不需要进行n-1轮比较,这个时候可以提前结束数组的比较(信号灯思想).
在外层循环设置一个boolean变量flag,初始值为false;内层循环中一旦数据发生交换,flag的值改变为true;每次完成一轮比较(内城层循环执行完),查看flag的值是否改变为true;改变为true,标明数据位置发生了改变,则排序未完成,继续执行排序,若flag的值没有发生改变,还是false,则该轮没有发生数据改变,此时数据排序已经完成,可以利用break跳出外层循环结束程序.
例:
private static void bubble(int[] a) {
for(int i = 1; i <= a.length-1;i++) {
boolean flag = false;
for(int j = 1; j <= a.length - i; j++) {
if(a[j-1] > a[j]) {
int temp = a[j-1];
a[j-1] = a[j];
a[j] = temp;
flag = true;
}
}
if(flag = false) {
break;
}
}
System.out.println(Arrays.toString(a));
}