插入排序 【InsertionSort】

插入排序

插入排序的工作方式像排序一手撲克牌。 假設左手的牌是排序好的,桌面上的是未知的牌
1. 開始時,我們的左手爲空並且桌子上的牌面向下。
2. 然後,我們每次從桌子上拿走一張牌並將它插入左手正確的位置。 爲了找到插入的正確位置,我們將要插入的牌與左手的牌挨着比較,直接找到合適的位置並插入進去。

在實際的實現過程中,我們可以將數組的第0個元素看成是已經排序好的,然後從第二個元素開始進行插入。

算法實現

public class InsertionSort {

    public void insertionSort(int[] arr) {
        if(arr == null || arr.length < 2) {
            return ;
        }
        for (int i = 1; i < arr.length; i++) {
            for (int j = i; j > 0 && arr[j] < arr[j-1] ; j--) {
                swap(arr, j, j-1);
            }
        }
    }

    private void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp; 
    }
}

時間複雜度

因爲每次插入的時候都需要去比較,所以時間複雜度爲O(N^2)

穩定性

因爲插入的數據是挨着順序進入的,所以排序前後的相對順序是不會改變的。所以是穩定的算法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章