天天看點

【圖解算法】排序算法——插入排序圖解算法目錄

插入排序(insertion sorting)

大體含義是這樣的,想我們在打撲克牌理牌時的思路一樣,來一張撲克牌做一次插入操作。

【圖解算法】排序算法——插入排序圖解算法目錄

下面我們給出普通版和優化版的插入排序

public int [] insertionSort(int [] arr){
        for (int i = ; i<arr.length;i++){
            for (int j = i; j> && arr[j] < arr[j-];j--){
                int temp = arr[j];//循環比較兩個相鄰的值,滿足排序條件做交換,不滿足跳出目前這層循環
                arr[j] = arr[j-];
                arr[j-] = temp;
            }
        }
        return arr;
    }

    public int [] insertionSortPlus(int [] arr){
        for (int i = ; i<arr.length;i++){
            int x = arr[i]; //記錄目前抽的數
            int j;          //記錄數的位置
            for (j = i; j> && arr[j-] >x;j--){
                arr[j] = arr[j-];//挪位置
            }
            arr[j] = x;     //最後處理目前抽的數的位置歸宿 需要注意的是這裡的 j 是上面 for 循環退出時的值
        }
        return arr;
    }
           

優化版的算法主要在于交換的次數上的優化,在數組本身的順序較為良好的情況下,這種插入排序的優勢可以展現出來,因為不用向冒泡或是選擇排序那樣必須走完内層循環,找到一個合适的時機可以提前跳出内層循環。

圖解算法目錄

【圖解算法】排序算法——冒泡排序、選擇排序

【圖解算法】排序算法——插入排序

【圖解算法】排序算法——歸并排序

【圖解算法】排序算法——快速排序

【圖解算法】Java GC算法

【圖解算法】排序算法——堆排序

【圖解算法】并查集 —— 聯合查找算法

【圖解算法】排序算法——計數排序

Gif Power By https://visualgo.net

繼續閱讀