插入排序
时间复杂度为O(n^2)
public static void sort(int[] arr){
int temp;
for(int i = 1; i < arr.length; i++){ temp = arr[i]; int j = i;
for(; j>0 && arr[j-1]>temp;j--){ // 大于temp的数都往右移动
arr[j] = arr[j-1]; }
//将当前位置放入合适的值
arr[j] = temp; }
}
冒泡排序
时间复杂度:O(n) ~ O(n²)
空间复杂度:O(n)
public static void sort(int[] array) {
if (array == null || array.length == 0) {
return;
}
int length = array.length;
//外层:需要length-1次循环比较
for (int i = 0; i < length - 1; i++) {
//内层:每次循环需要两两比较的次数,每次比较后,都会将当前最大的数放到最后位置,所以每次比较次数递减一次
for (int j = 0; j < length - 1 - i; j++) {
if (array[j] > array[j+1]) {
//交换数组array的j和j+1位置的数据
swapByTemp(array, j, j+1);
}
}
}
}
/**
* 通过临时变量交换数组array的i和j位置的数据
*/
public static void swapByTemp(int[] array, int i, int j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
/**
* 通过算术法交换数组array的i和j位置的数据(有可能溢出)
*/
public static void swapByArithmetic(int[] array, int i, int j) {
array[i] = array[i] + array[j];
array[j] = array[i] - array[j];
array[i] = array[i] - array[j];
}
/**
* 通过位运算法交换数组array的i和j位置的数据
*/
public static void swapByBitOperation(int[] array, int i, int j) {
array[i] = array[i]^array[j];
array[j] = array[i]^array[j]; //array[i]^array[j]^array[j]=array[i]
array[i] = array[i]^array[j]; //array[i]^array[j]^array[i]=array[j]
}