排序法-冒泡排序法

时间:2025-03-02 07:38:48
package com.jianstudy.array; import java.util.Arrays;//导入Arrays工具类 public class ArrayDemo09 { public static void main(String[] args) { int [] array ={1,6,7,8,9,0,2365,36,78,77,78,5,33,7,85}; sortMine(array);//调用自己写的排序方法 for(int i : array){//使用增强for循环打印数组 for each循环 System.out.print(i+" "); } //System.out.println(Arrays.toString(array));//使用Arrays类工具打印 } //冒泡排序 public static int[] sortMine(int[] a) { /* 升序降序看要求 1. 比较数组中,两个相邻的元素,如果前后项不等就交换他们的位置 2. 每一次比较都会产生一个最大或者最小的数 3. 下一轮则可以少一次排序 4. 依次循环直至结束 */ int temp = 0;//两项交换时的中转项 //升序 从小到大排序 for (int i = 0; i < a.length-1; i++) {//外层循环 数组有几项 就循环n-1次 /* 1. 外层循环:i < a.length - 1 含义: 外层循环控制排序的轮数。 对于一个长度为 n 的数组,最多需要 n - 1 轮排序才能确保数组完全有序。 为什么是 i < a.length - 1? 每一轮排序会将当前未排序部分的最大值“冒泡”到正确的位置。 经过 n - 1 轮后,剩下的最后一个元素已经是最小的,无需再比较。 */ for (int j = 0; j < a.length-1-i; j++) {//内存循环 比较前后项大小 有大小就交换他们的位置 /* 2. 内层循环:j < a.length - 1 - i 含义: 内层循环负责在每一轮中比较相邻元素并交换。 a.length - 1 - i 表示每一轮需要比较的范围。 为什么是 j < a.length - 1 - i? 每一轮排序后,最大的元素会被放到数组的末尾,因此下一轮无需再比较已经排序好的部分。 i 表示已经排序好的元素个数,因此每一轮需要比较的范围逐渐缩小。 */ if (a[j + 1] < a[j]) {//升序 比较两项 如果后项比前项小就交换前后项的位置 降序就是把小于号改成大于号 temp = a[j + 1];//先把后项先赋给中转项 a[j + 1] = a[j];//给然后把前项赋后项 a[j] = temp;//最后把存放后项的中转项赋给前项 } } } return a; } }