本文中位运算【 ^ 亦或】进行变量值替换的原理可参考此链接
package algorithm; public class BubbleSort { public static void main(String[] args) { int[] arr1 = { 5, 8, 6, 3, 1, 9, 7, 4, 2 }; // 不知道是什么排序 sort(arr1); echoArr(arr1); int[] arr2 = { 5, 8, 6, 3, 1, 9, 7, 4, 2 }; // 冒泡排序 bubbleSort(arr2); echoArr(arr2); } // 不知道是什么排序 public static void sort(int[] arr) { for (int i = 0; i < arr.length; i++) { for (int j = i + 1; j < arr.length; j++) { if(arr[i] > arr[j]) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } } // 冒泡排序 // 时间复杂度 n ^ 2 public static void bubbleSort(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { // 本次循环中是否进行过交换 boolean flag = false; for (int j = 0; j < arr.length - 1 - i; j++) { if(arr[j] > arr[j + 1]) { /* * 第一种交换值的方式 * * int temp = arr[j]; * arr[j] = arr[j + 1]; * arr[j + 1] = temp; */ /* * 第二种交换值的方式 * * 不适用第三方变量,采用亦或进行变量值替换 * * arr[j] = arr[j] ^ arr[j + 1]; * arr[j + 1] = arr[j] ^ arr[j + 1]; * arr[j] = arr[j] ^ arr[j + 1]; */ /* * 第三种交换值的方式 * * 原理: * a = 2; * b = 3; * * a = a + b = 5; * b = a - b = 2; * a = a - b = 3; * 交换完成 * 与亦或逻辑原理相同 */ arr[j] = arr[j] + arr[j + 1]; arr[j + 1] = arr[j] - arr[j + 1]; arr[j] = arr[j] - arr[j + 1]; flag = true; } } if(!flag) { // 没进行过交换 说明数组排序已经完成 // 程序可直接退出 break; } } } // 输出数组内容的方法 public static void echoArr(int[] arr) { for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]); } System.out.println(); } }附执行结果如下:
123456789 123456789