1. 程式人生 > >插入排序 【InsertionSort】

插入排序 【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)

穩定性

因為插入的資料是挨著順序進入的,所以排序前後的相對順序是不會改變的。所以是穩定的演算法。