插入排序

58 阅读1分钟

接下来是插入排序,插入排序类似于平常打牌,抽到的新牌依次向前比较,放到它对应的位置上。时间复杂度是O(N^2),空间复杂度是O(1),稳定。O(N^2)的时间复杂度是插入排序的最差情况,即完全逆序的情况,所以常数项是冒泡排序、选择排序中最低的。

图片的直观展示如下:

插入排序.png

相关的代码如下:

    public static void main(String[] args) {
        int[] nums = new int[]{1,2,5,2,0,0,1};
        insertionSort(nums);
        for (int i : nums){
            System.out.println(i);
        }
    }
    public static void insertionSort(int[] arr) {
        if(arr == null || arr.length < 2){
            return;
        }
        //核心代码,依次保证0 ~ i的排序
        for (int i = 1; i < arr.length; i++){
            //依次将i与前面的进行对比,如果比前面小就交换
            for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--){
                swap(arr, j, j + 1);
            }
        }
    }
    public static void swap(int[] arr, int i, int j){
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }