1. 程式人生 > >【圖解演算法】排序演算法——插入排序

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

插入排序(insertion sorting)

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

這裡寫圖片描述

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

    public int [] insertionSort(int [] arr){
        for (int i = 1; i<arr.length;i++){
            for (int j = i; j>0 && arr[j] < arr[j-1];j--){
                int temp = arr[j];//迴圈比較兩個相鄰的值,滿足排序條件做交換,不滿足跳出當前這層迴圈
arr[j] = arr[j-1]; arr[j-1] = temp; } } return arr; } public int [] insertionSortPlus(int [] arr){ for (int i = 1; i<arr.length;i++){ int x = arr[i]; //記錄當前抽的數 int j; //記錄數的位置 for
(j = i; j>0 && arr[j-1] >x;j--){ arr[j] = arr[j-1];//挪位置 } arr[j] = x; //最後處理當前抽的數的位置歸宿 需要注意的是這裡的 j 是上面 for 迴圈退出時的值 } return arr; }

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

圖解演算法目錄