插入排序詳解

2021-09-02 16:21:33 字數 891 閱讀 7729

有乙個已經有序的資料序列,要求在這個已經排好的資料序列中插入乙個數,但要求插入後此資料序列仍然有序,這個時候就要用到一種新的排序方法——插入排序法,插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的、個數加一的有序資料,演算法適用於少量資料的排序,時間複雜度為o(n^2)。

插入排序的基本思想是:每步將乙個待排序的紀錄,按其關鍵碼值的大小插入前面已經排序的檔案中適當位置上,直到全部插入完為止。

⒈從有序數列和無序數列開始進行排序;

⒉處理第i個元素時(i=2,3,…,n),數列是已有序的,而數列是無序的。用ai與ai-1,a i-2,…,a1進行比較,找出合適的位置將ai插入;

⒊重複第二步,共進行n-i次插入處理,數列全部有序。

/**

*插入排序

*@paramarr

*@return

*/private

static

int insertsort(intarr)

for(inti=1;ifor(intj=i;j>0;j--)else}}

return arr;

}

如果目標是把n個元素的序列公升序排列,那麼採用插入排序存在最好情況和最壞情況。最好情況就是,序列已經是公升序排列了,在這種情況下,需要進行的比較操作需(n-1)次即可。最壞情況就是,序列是降序排列,那麼此時需要進行的比較共有n(n-1)/2次。插入排序的賦值操作是比較操作的次數加上 (n-1)次。平均來說插入排序演算法的時間複雜度為o(n^2)。因而,插入排序不適合對於資料量比較大的排序應用。但是,如果需要排序的資料量很小,例如,量級小於千,那麼插入排序還是乙個不錯的選擇。

插入排序詳解

折半插入排序最難理解的地方在於 插入點位置 那麼如何確定插入點的位置呢?while left right else 1 如果p mid 關鍵字則執行right mid 1 此時位置情況 right mid left 所以插入的位置 right後面乙個,即left 2 如果p mid 關鍵字則執行 l...

插入排序 JAVA詳解

插入排序是一種簡單的排序in place排序 即只需o 1 的額外空間排序 演算法,把陣列分為兩個子陣列,乙個是已排序好的,乙個是為排序的,從未排序的陣列中拿出元素然後在已排序陣列中從後往前掃瞄,找到相應位置 小於或者大於 並插入,在從後向前掃瞄的過程中,需要反覆把已排序元素逐步向後挪位,為新元素提...

C 插入排序詳解

演算法思路 從第乙個元素開始,該元素可以認為已經被排序 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄 如果該元素 已排序 大於新元素,將該元素移到下一位置 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置 將新元素插入到下一位置中 重複步驟2 5 使用插入排序為一列數字進行排序的過程 ...