冒泡排序
public class BubbleSort {
/**
* 冒泡排序:比较相邻两个数
* 时间复杂度:O(N^2)
* @param arr
*/
public static void bubbleSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
// 在那个范围进行排序(每一遍排序,最后一个数字都会被确定)
for (int e = arr.length - 1; e > 0; e--) {
for (int i = 0; i < e; i++) {
if (arr[i] > arr[i + 1]) {
swap(arr, i, i + 1);
}
}
}
}
// 交换 i 和 j 上的值
public static void swap(int[] arr, int i, int j) {
/* 异或运算
* - 0^N=N N^N=0
* - 满足交换律、结合律
*
* 例子: int a = 甲 int b = 乙
* a = a ^ b a = 甲 ^ 乙 b = 乙
* b = a ^ b a = 甲 ^ 乙 b = 甲 ^ 乙 ^ 乙 = 甲
* a = a ^ b a = 甲 ^ 乙 ^ 甲 = 乙 b = 甲
*/
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
}