package com.ysh.demo; import org.junit.Test; import java.util.Arrays; /* 冒泡排序: 一个数组冒泡,如果左边数字大于右边数字,那么交换位置。 数组: arr = {1,2,3}, 分析: 第一次:确定一个最大值,排在数组的最后一位,需要比较的次数为arr,length-1-i,i为外循环的计数 第二次:确认数组倒数第二位,需要比较的次数为arr,length-1-i ... 总结: 只需要内外两个循环即可。 for (int i = 0; i<arr.length-1;i++){ for (int j = 0;j<arr.length-i-1;j++){} } */ public class SortSet { public static void main(String[] args) { int[] arr = {0,2,3,1,2,4,5,0,8}; //定义临时变量,用于交换 int temp = 0; //外循环,次数为数组长度-1 for (int i=0; i<arr.length-1;i++){ //内循环组长度-1-i, for (int j = 0;j<arr.length-i-1;j++){ if (arr[j]>=arr[j+1]){ temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } } /* 冒泡算法优化 引入计数器 */ @Test public void bubbleAdvance(){ int[] arr = {0,1,2,3,5,4}; //定义临时变量,用于交换 int temp=0; //定义标志位 boolean flag; //外循环,次数为数组长度-1 for (int i = 0; i<arr.length-1;i++){ flag=true; //内循环组长度-1-i, for (int j = 0;j<arr.length-i-1;j++){ if (arr[j]>arr[j+1]){ temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; flag=false; } } if (flag){ System.out.println("第"+i+"次循环,排序结束"); System.out.println(Arrays.toString(arr)); return; } } } }