选择

public static void selectionSort(int[] arr){
    if (null==arr||arr.length<2)
        return;
    /*
    每次选出最小值,外循环0~N-1 每个内循环i~N-1
     */
    for (int i = 0; i < arr.length; i++) {
        int index = i;
        for(int j=i+1;j<arr.length;j++){
            index = arr[j] < arr[index] ? j : index;
        }
        swap1(arr,i,index);
    }
}

冒泡

public static void bubbleSort(int[] arr){
    if (null==arr||arr.length<2)
        return;
    /*
    每次把最大值冒泡到最后位置,外循环0~N-1 每个内循环i~N-1
     */
    for (int i = arr.length-1; i >=0; i--) {
        for (int j=0;j<i;j++){
            if (arr[j]>arr[j+1])
                swap2(arr,j,j+1);
        }
    }
}

插入

public static void insertionSort(int[] arr){
    if (null==arr||arr.length<2)
        return;
    /*
    0~1
    0~2
    0~3
    每次保证0~i上有序,外循环1~N-1,内循环i-1~0从右往左依次比较保证有序
     */
    for (int i = 1; i < arr.length; i++) {
        for (int j=i-1;j>=0&&arr[j]<arr[j+1];j--){
            swap1(arr,j,j+1);
        }
    }
}

数组中两个值交换位置

适合所有场景

public static void swap1(int[] arr,int i,int j){
    int tmp = arr[i];
    arr[i] = arr[j];
    arr[j] = tmp;
}

仅适合数字类型

public static void swap2(int[] arr,int i, int j){
    arr[i] = arr[i] ^ arr[j];
    arr[j] = arr[i] ^ arr[j];
    arr[i] = arr[i] ^ arr[j];
}