public static void main(String[] args) {
int[] a = {5, 6, 3, 4, 8, 9, 13, 441, 8};
// function1(a);
function2(a);
}
public static void function1(int[] a) {
int count1 = 0;
for (int i = 0; i < a.length - 1; i++) {
for (int j = i + 1; j < a.length; j++) {
int temp;
if (a[i] > a[j]) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
count1++;
for (int m : a) {
System.out.print(m + " ");
}
System.out.println("");
}
}
System.out.println("第" + (i+1) + "次循环完成");
}
System.out.println("总共交换次数为"+count1+"次");
}
public static void function2(int[] arr) {
int count2 = 0;
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
count2++;
for (int m : arr) {
System.out.print(m + " ");
}
System.out.println("");
}
}
System.out.println("第" + (i+1) + "次循环完成");
}
System.out.println("总共交换次数为"+count2+"次");
}
结果
方法1(外层for循环每一次选出最小的放在最前面(下图的第一行结果就是外for的第一次循环完成))
方法2(外层for循环每一次选出最大的放在最后面(下图的前三行结果才是外for的第一次循环完成,从下图可以看出外循环其实3次就排好序了))
无论哪一种方法排序的次数是不变的,都交换了7次
可以参考