原理分析
image.png
排序结果:
代码
/** * 冒泡排序 * 相邻元素两两比较,大的往后放,第一次完毕后,最大值就出现在 * 最大索引处,同理,继续,即可得到一个排序好的数组 * * 规律: * 1、两两比较,大的往后放。 * 2、第一次比较完毕后,下一次比较的时候就会减少一个元素的比较 * 3、第一次比较,有0个元素不比 * 第二次比较,有1个元素不比 * 第三次比较,有2个元素不比 * 第四次比较,有3个元素不比 * ..... * 4、总共需要比较数组的长度-1次 */ public class BubbleSort { public static void main(String[] args) { int[] arr = {21,69,90,55,12}; //输出数组 printArr(arr); //详细排序过程 detailSort(arr); int[] arr2 = {23,59,34,88,2,99,68}; //最终版 endSort(arr2); } private static void endSort(int[] arr2) { System.out.println(); System.out.println("原序列"); printArr(arr2); //两次for循环解决 for(int i = 0; i < arr2.length-1; i++){ for(int j=0; j < arr2.length-1-i;j++){ if(arr2[j] > arr2[j+1]){ int temp = arr2[j]; arr2[j] = arr2[j+1]; arr2[j+1] = temp; } } } System.out.println(); System.out.println("两层循环排序"); printArr(arr2); } private static void detailSort(int[] arr) { System.out.println(); System.out.println("第一次排序:"); //第一次排序 //arr.length-1 为了防止数据越界 //arr.length-1-0:为了减少比较的次数 for(int i=0; i < arr.length-1-0; i++){ if(arr[i] > arr[i+1]){ int temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; } } printArr(arr); System.out.println(); System.out.println("第二次排序:"); //第二次排序 for(int i=0; i < arr.length-1-1; i++){ if(arr[i] > arr[i+1]){ int temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; } } printArr(arr); System.out.println(); System.out.println("第三次排序:"); //第三次排序 for(int i=0; i < arr.length-1-2; i++){ if(arr[i] > arr[i+1]){ int temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; } } printArr(arr); System.out.println(); System.out.println("第四次排序:"); //第四次排序 for(int i=0; i < arr.length-1-3; i++){ if(arr[i] > arr[i+1]){ int temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; } } printArr(arr); } //输出数组 private static void printArr(int[] arr) { System.out.println(Arrays.toString(arr)); } }