import java.util.Arrays;public class Bubble { public static void main(String arg[]) { // int[] sz = { 3, 5, 7, 5, 4, 3, 554, 43, 232, 67, 3, 212, 3, 546, 0 }; int[] sz = { 1, 2, 1, 4, 5, 6, 7, 8, 9 }; System.out.println("原数组:" + Arrays.toString(sz)); // 冒泡排序优化 int isChange = 0;// 记录是否发生了置换,0未置换,1发生了置换 for (int i = 0; i < sz.length - 1; i++) { isChange = 0;// 重置 for (int j = 0; j < sz.length - 1 - i; j++) { if (sz[j] > sz[j + 1]) { int temp = sz[j]; sz[j] = sz[j + 1]; sz[j + 1] = temp; isChange = 1;// 进到这里说明发生了置换 } } // 如果比较完一趟没有发生置换,那么说明已经排好序了,不需要再比较下去 if (isChange == 0) { break; } System.out.println("第" + (i + 1) + "次置换结果:" + Arrays.toString(sz)); } }}
易错:两个for循环条件,外层循环是比较次数,比较次数为数组长度-1,如长度为2的数组比较1次即可;