思路:
用二重循环实现,外循环变量设为i,内循环变量设为j。假如有n个数需要进行排序,则外循环重复n-1次,内循环依次重复n-1,n-2,…,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,…,n-1,对于每一个i,j的值依次为0,1,2,…n-i 。
设数组长度为N:
1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。
2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。
3.N=N-1,如果N不为0就重复前面二步,否则排序完成。
直接上代码:
import java.util.Arrays;/** 工具类:冒泡排序* */public class BubblSortUtils {/** 1.Int类型:冒泡排序(降序)**/public static void bubbleSortDesc(int[] arr) {int temp; // 定义一个临时变量for (int i=0;i<arr.length;i++) {for (int j = 0; j < arr.length; j++) {if (arr[i] >= arr[j]) {temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}}}/** 2.Int类型:冒泡排序(升序)**/public static void bubbleSortAsc(int[] arr) {int temp; // 定义一个临时变量for(int i=0;i<arr.length-1;i++){ // 冒泡趟数for(int j=0;j<arr.length-i-1;j++){if(arr[j+1]<arr[j]){temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}} /** 3.Double类型:冒泡排序(降序)**/public static void bubbleSortDescDouble(Double[] arr) {Double temp; // 定义一个临时变量for (int i=0;i<arr.length;i++) {for (int j = 0; j < arr.length; j++) {if (arr[i] >= arr[j]) {temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}}}/** 4.Double类型:冒泡排序(升序)**/public static void bubbleSortAscDouble(Double[] arr) {Double temp; // 定义一个临时变量for(int i=0;i<arr.length-1;i++){ // 冒泡趟数for(int j=0;j<arr.length-i-1;j++){if(arr[j+1]<arr[j]){temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}}/** 5.Int类型:冒泡排序(升序):排序双数组;**/public static void bubbleSortAscMultiple(int[] arr,String[] arr2) {int temp; // 定义一个临时变量String temp2; // 定义一个临时变量for(int i=0;i<arr.length-1;i++){ // 冒泡趟数for(int j=0;j<arr.length-i-1;j++){if(arr[j+1]<arr[j]){temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;temp2 = arr2[j];arr2[j] = arr2[j+1];arr2[j+1] = temp2;}}}}/** 6.Int类型:冒泡排序(升序):排序三数组;* * 多个数组排序,可继续优化排序代码* 提供思路:比如:第一个入参传int类型数组进行排序,后面多个数组按照二维数组入参;**/public static void bubbleSortAscMultiple2(int[] arr,String[] arr2,String[] arr3) {int temp; // 定义一个临时变量String temp2; // 定义一个临时变量String temp3; // 定义一个临时变量for(int i=0;i<arr.length-1;i++){ // 冒泡趟数for(int j=0;j<arr.length-i-1;j++){if(arr[j+1]<arr[j]){temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;temp2 = arr2[j];arr2[j] = arr2[j+1];arr2[j+1] = temp2;temp3 = arr3[j];arr3[j] = arr3[j+1];arr3[j+1] = temp3;}}}}/** 7.Int类型:冒泡排序(降序):排序双数组**/public static void bubbleSortDescMultiple(int[] arr,String[]arr2) {int temp;String temp2;for (int i=0;i<arr.length;i++) {for (int j = 0; j < arr.length; j++) {if (arr[i] >= arr[j]) {temp = arr[i];arr[i] = arr[j];arr[j] = temp;temp2 = arr2[i];arr2[i] = arr2[j];arr2[j] = temp2;}}}}/** 8.Doble类型:冒泡排序(降序):排序双数组**/public static void bubbleSortDescMultipleDouble(Double[] arr,String[]arr2) {Double temp;String temp2;for (int i=0;i<arr.length;i++) {for (int j = 0; j < arr.length; j++) {if (arr[i] >= arr[j]) {temp = arr[i];arr[i] = arr[j];arr[j] = temp;temp2 = arr2[i];arr2[i] = arr2[j];arr2[j] = temp2;}}}}public static void main(String[] args) {int arr[] = new int[]{9,3,13,12,12,-2,5,-11,100,423,5622,78900};bubbleSortDesc(arr);System.out.println("1.Int类型:冒泡排序(降序):"+Arrays.toString(arr));System.out.println("----------------------------");int arr2[] = new int[]{9,3,13,12,12,-2,5,-11,100,423,5622,78900};bubbleSortAsc(arr2);System.out.println("2.Int类型:冒泡排序(升序):"+Arrays.toString(arr2));System.out.println("----------------------------");Double arr3[] = new Double[]{9.1,3.1,13.1,9.2,9.0,0.0,-0.2,-0.1,-0.35,100.0,423.0,9.0,5622.0,78900.0};bubbleSortDescDouble(arr3);System.out.println("3.Double类型:冒泡排序(升序):"+Arrays.toString(arr3));System.out.println("----------------------------");Double arr4[] = new Double[]{9.1,3.1,13.1,9.2,9.0,0.0,-0.2,-0.1,-0.35,100.0,423.0,9.0,5622.0,78900.0};bubbleSortAscDouble(arr4);System.out.println("4.Double类型:冒泡排序(升序):"+Arrays.toString(arr4));System.out.println("----------------------------");int arr5[] = new int[]{9,3,13,12,12,5};String arrStr5[] = new String[]{"西安","北京","上海","武汉","深圳","成都"};bubbleSortAscMultiple(arr5,arrStr5);System.out.println("5.Int类型:冒泡排序(升序):排序双数组1:"+Arrays.toString(arr5));System.out.println("5.Int类型:冒泡排序(升序):排序双数组2:"+Arrays.toString(arrStr5));System.out.println("----------------------------");int arr6[] = new int[]{9,3,13,12,12,5};String arrStrArr1[] = new String[]{"西安","北京","上海","武汉","深圳","成都"};String arrStrArr2[] = new String[]{"西安2","北京2","上海2","武汉2","深圳2","成都2"};bubbleSortAscMultiple2(arr6,arrStrArr1,arrStrArr2);System.out.println("6.Int类型:冒泡排序(升序):排序三数组1:"+Arrays.toString(arr6));System.out.println("6.Int类型:冒泡排序(升序):排序三数组2:"+Arrays.toString(arrStrArr1));System.out.println("6.Int类型:冒泡排序(升序):排序三数组3:"+Arrays.toString(arrStrArr2));System.out.println("----------------------------");int arr7[] = new int[]{9,3,13,12,12,5};String arrStr7[] = new String[]{"西安","北京","上海","武汉","深圳","成都"};bubbleSortDescMultiple(arr7,arrStr7);System.out.println("7.Int类型:冒泡排序(降序):排序双数组1:"+Arrays.toString(arr7));System.out.println("7.Int类型:冒泡排序(降序):排序双数组2:"+Arrays.toString(arrStr7));System.out.println("----------------------------");Double arr8[] = new Double[]{9.1,3.1,13.1,9.2,9.0,0.0};String arrStr8[] = new String[]{"西安","北京","上海","武汉","深圳","成都"};bubbleSortDescMultipleDouble(arr8,arrStr8);System.out.println("8.Doble类型:冒泡排序(降序):排序双数组1:"+Arrays.toString(arr8));System.out.println("8.Doble类型:冒泡排序(降序):排序双数组2:"+Arrays.toString(arrStr8));}
}
测试输出:
1.Int类型:冒泡排序(降序):[78900, 5622, 423, 100, 13, 12, 12, 9, 5, 3, -2, -11]
----------------------------
2.Int类型:冒泡排序(升序):[-11, -2, 3, 5, 9, 12, 12, 13, 100, 423, 5622, 78900]
----------------------------
3.Double类型:冒泡排序(升序):[78900.0, 5622.0, 423.0, 100.0, 13.1, 9.2, 9.1, 9.0, 9.0, 3.1, 0.0, -0.1, -0.2, -0.35]
----------------------------
4.Double类型:冒泡排序(升序):[-0.35, -0.2, -0.1, 0.0, 3.1, 9.0, 9.0, 9.1, 9.2, 13.1, 100.0, 423.0, 5622.0, 78900.0]
----------------------------
5.Int类型:冒泡排序(升序):排序双数组1:[3, 5, 9, 12, 12, 13]
5.Int类型:冒泡排序(升序):排序双数组2:[北京, 成都, 西安, 武汉, 深圳, 上海]
----------------------------
6.Int类型:冒泡排序(升序):排序三数组1:[3, 5, 9, 12, 12, 13]
6.Int类型:冒泡排序(升序):排序三数组2:[北京, 成都, 西安, 武汉, 深圳, 上海]
6.Int类型:冒泡排序(升序):排序三数组3:[北京2, 成都2, 西安2, 武汉2, 深圳2, 上海2]
----------------------------
7.Int类型:冒泡排序(降序):排序双数组1:[13, 12, 12, 9, 5, 3]
7.Int类型:冒泡排序(降序):排序双数组2:[上海, 深圳, 武汉, 西安, 成都, 北京]
----------------------------
8.Doble类型:冒泡排序(降序):排序双数组1:[13.1, 9.2, 9.1, 9.0, 3.1, 0.0]
8.Doble类型:冒泡排序(降序):排序双数组2:[上海, 武汉, 西安, 深圳, 北京, 成都]