- // 冒泡排序
- public class bubbleSort {
- public static void main(String[] args) {
- int[] arr = {22,54,-1,33,66,99,22,35,0,2};
- System.out.println("排序前的数组:"+Arrays.toString(arr));
- /*
- * 因为有 arr.length 个元素, 就说明最多要进行长度 - 1 轮比较, 这一层循环是把
- * 最多要进行比较的轮数框定了, 而不是遍历每个相邻元素做比较, 这个是内层循环做的
- * 外层只管你最多要进行多少次, 所以就可以利用这个条件提前跳出, 从而优化效率
- */
- // 所以循环条件也可以这样写: for(int i = 1;i<arr.length;i++)
- for(int i = 0;i<arr.length-1;i++){
- boolean loopFlag = true;// 假设都排序好了, 内层循环开始前都初始化一次
- // 每一轮要做的比较
- for(int j = 0;j<arr.length-1-i;j++) {//-i 减掉的是已经排序好的
- if(arr[j]>arr[j+1]) {
- int tmp = arr[j];
- arr[j] = arr[j+1];
- arr[j+1] = tmp;
- loopFlag = false;// 发现没排序好, 则 false, 一旦没有交换, 下面的 break 就会执行
- }
- }
- if(loopFlag) break;// 优化: 条件没有改变说明没有需要交换的数据了, 直接跳出外层循环
- }
- System.out.println("排序后的数组:"+Arrays.toString(arr));
- }
- }
排序算法
来源: http://www.bubuko.com/infodetail-3408648.html