Java算法 -- 插入排序

java算法 -- 插入排序

經過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應的位置並插入。插入排序很是相似於整撲克牌。在開始摸牌時,左手是空的,牌面朝下放在桌上。接着,一次從
桌上摸起一張牌,並將它插入到左手一把牌中的正確位置上。爲了找到這張牌的正確位置,要將它與手中已有的牌從右到左地進行比較。不管何時,左手中的牌都是排好序的。若是輸入數組已是排好序的話,插入排序出現最佳狀況,其運行時間是輸入規模的一個線性函數。若是輸入數組是逆序排列的,將出現最壞狀況。平均狀況與最壞狀況同樣,其時間代價是(n2)。java

public class InsertionSortTest {

    public static void main(String[] args) {
        int[] array = {1, 2, 5, 41, 7, 11, 13, 17, 59, 19, 23, 29, 31, 37, 43, 47, 53};
        int[] bubbleSortArrays = insertionSort(array);
        for (int s : bubbleSortArrays) {
            System.out.print(s + " ");
        }
    }

    /**
     * 插入排序
     *
     * @param arr
     * @return
     */
    public static int[] insertionSort(int[] arr) {
        for (int i = 1; i < arr.length; i++) {
            //插入的數
            int insertVal = arr[i];
            //被插入的位置(準備和前一個數比較)
            int index = i - 1;
            //若是插入的數比被插入的數小
            while (index >= 0 && insertVal < arr[index]) {
                //將把 arr[index] 向後移動
                arr[index + 1] = arr[index];
                //讓 index 向前移動
                index--;
            }
            //把插入的數放入合適位置
            arr[index + 1] = insertVal;
        }

        return arr;
    }
}
相關文章
相關標籤/搜索