一、分析下边冒泡排序的运行过程:
package com.itheima;
public class Example24 {
public static void main(String[] args) {
int[] arr = { 9, 8, 3, 5, 2 };
// 1、冒泡排序前,先循环打印数组元素
for (inti = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println(); // 用于换行
// 2、进行冒泡排序
// 2.1、外层循环定义需要比较的轮数(两数对比,要比较n-1轮)
for (int i= 1; i < arr.length; i++) {
// 2.2、内层循环定义第i轮需要比较的两个数
for (intj = 0; j < arr.length -i; j++) {
if (arr[j] > arr[j + 1]) { // 比较相邻元素
// 下面的三行代码用于相邻两个元素交换
inttemp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
// 3、完成冒泡排序后,再次循环打印数组元素
for (inti = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
分析过程要求如下:
1、排序过程中,
当i=0时,j是怎样循环的,得到的排序状态是啥;
当i=1时,j是怎样循环的,得到的排序状态是啥;
……
当i=?时,循环结束。
在循环内打印输出每一次的排序结果。
j的循环次数是arr.length -i次。
外层循环控制行数,内层循环控制比较的次数。
每一轮内循环都将前面大的数依次放在最后面。
public class Main {
public static void main(String[] args) {
int[] arr = { 9, 8, 3, 5, 2 };
// 1、冒泡排序前,先循环打印数组元素
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println(); // 用于换行
// 2、进行冒泡排序
// 2.1、外层循环定义需要比较的轮数(两数对比,要比较n-1轮)
for (int i= 1; i < arr.length; i++) {
// 2.2、内层循环定义第i轮需要比较的两个数
for (int j = 0; j < arr.length -i; j++) {
if (arr[j] > arr[j + 1]) { // 比较相邻元素
// 下面的三行代码用于相邻两个元素交换
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
System.out.println("第"+i+"次排序后的结果:"+Arrays.toString(arr));
}
// 3、完成冒泡排序后,再次循环打印数组元素
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
这种东西还是自己debug看吧。看不懂的话 可以尝试把数组的变化写下来,然后找规律。