这段代码实现了冒泡排序(Bubble Sort)算法,是一种基础的排序算法,核心思想是通过重复遍历数组、比较相邻元素并交换逆序对,将最大(或最小)的元素逐步“冒泡”到数组末尾。以下是逐部分的详细解析:

 

1. 方法定义

public static void maopao(int[] arr)

 public static void :这是一个公共静态方法,无需创建对象即可调用,无返回值( void )。
 maopao :方法名,对应“冒泡”的拼音。
 int[] arr :参数是一个整型数组,排序操作原地进行(直接修改输入数组,不返回新数组)。

2. 外层循环(控制排序轮数)

for (int i = 0; i < arr.length - 1; i++) { ... }

变量 i 表示当前排序的轮数,从0开始,最多执行 arr.length - 1 轮(因为n个元素只需n-1轮即可排好序)。
每轮的作用:将未排序部分的最大元素移动到已排序部分的开头(即数组末尾)。例如:
第1轮( i=0 ):找出整个数组的最大元素,放到最后一位;
第2轮( i=1 ):找出剩余元素的最大元素,放到倒数第二位;
以此类推,直到所有元素排好序。

3. 内层循环(控制每轮的比较范围)

for (int j = 0; j < arr.length - i - 1; j++) { ... }

变量 j 表示当前比较的位置,从0开始,上限是 arr.length - i - 1 。
上限的意义:每轮结束后,末尾的 i 个元素已经是排好序的最大元素,无需再比较。例如:
第1轮( i=0 ): j 的上限是 arr.length - 1 (因为 arr.length - 0 - 1 = arr.length - 1 ),即比较所有元素;
第2轮( i=1 ): j 的上限是 arr.length - 2 ,即忽略最后1个已排序元素;
第 i 轮: j 的上限是 arr.length - i - 1 ,忽略最后 i 个已排序元素。

4. 逆序判断与交换

if (arr[j] > arr[j+1]) {
    int temp = arr[j];
    arr[j] = arr[j+1];
    arr[j+1] = temp;
}

条件 arr[j] > arr[j+1] :判断当前元素 arr[j] 是否比下一个元素 arr[j+1] 大(升序排序的条件)。
交换操作:如果条件成立,使用临时变量 temp 交换两个元素的位置,将较大的元素“后移”(即“冒泡”)。

5. 排序过程示例

以数组 [3, 1, 4, 2] 为例,演示排序过程:

初始数组: [3, 1, 4, 2] 
第1轮( i=0 ):
 j=0 : 3>1 ,交换→ [1, 3, 4, 2] ;
 j=1 : 3<4 ,不交换;
 j=2 : 4>2 ,交换→ [1, 3, 2, 4] ;
结果: [1, 3, 2, 4] (最大元素 4 已排到最后)。
第2轮( i=1 ):
 j=0 : 1<3 ,不交换;
 j=1 : 3>2 ,交换→ [1, 2, 3, 4] ;
结果: [1, 2, 3, 4] (第二大元素 3 排到倒数第二位)。
第3轮( i=2 ):
 j=0 : 1<2 ,不交换;
结果:数组已完全排序。

总结

这段代码通过双重循环实现了冒泡排序:

外层循环控制排序轮数( n-1 轮);
内层循环控制每轮的比较范围(逐次缩小);
相邻元素比较并交换逆序对,逐步将最大元素“冒泡”到数组末。

更多推荐