因为一次循环以后就确定一个数的位置所以第二次循环就可以不用和这一个数进行比较,所以第二次的 循环次数可以减去上一个循环的次数即循环次数为:数组长度-1-i;
import java.util.Arrays; public class Bubble { public static void main(String[] args) { int[] a = {1,5,9,8,2,3,4,8,9}; bubbleSort(a); } public static void bubbleSort(int[] a) { int temp; for(int i=0;i<a.length-1;i++) { for(int j=0;j<a.length-1;j++) { if(a[j]>a[j+1]) { temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } } System.out.println(Arrays.toString(a)); } }有时候在排序到一定的次数以后,我们想要的最终顺序就出来了,都是计算机还会继续在执行循环. 所以这时候我们就可以利用break来跳出循环. 怎么判断顺序有没有排好呢? 只要在循环的过程中没有执行到if()语句就说明以及是我们要的顺序了所以我们可以利用这一点 来对冒泡排序进行最后的优化;
import java.util.Arrays; public class Bubble { public static void main(String[] args) { int[] a = {1,5,9,8,2,3,4,8,9}; bubbleSort(a); } public static void bubbleSort(int[] a) { int temp; boolean judge = false; for(int i=0;i<a.length-1;i++) { for(int j=0;j<a.length-1;j++) { if(a[j]>a[j+1]) { judge = true; temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } //如果执行过if,judge=true就不会break;!是取反的意思.只有当if()里面为true在会执行if语句 if(!judge){ break; } System.out.println(Arrays.toString(a)); } }