排序演算法1 插入排序

2021-08-29 04:36:07 字數 938 閱讀 5654

插入排序思想:每一步將乙個待排序的元素,按期排序碼的大小,插入到前面已經排好序的一組元素的合適位置上去,知道元素插完。

插入排序分為直接插入排序,和優化後的二分插入排序,我們先看第一種;

基本思想:當我們插入第i(i>=1)個元素時,前面的所有元素已經排好序,此時我們使用當前元素從後向前比較,直到找到乙個小於array[i]的節點(若沒有,則插在陣列下標為0的地方),從下乙個節點順序後移,將array[i]插入進來。

時間複雜度: o(n^2)

空間複雜度: o(1)

穩 定 性 :穩定

適用場景:1.資料量較小;2.基本接近有序

}}二分插入排序

基本思想:在直接插入排序的基礎上進行優化,因為待插入元素之前的元素已經有序,我們沒必要每個都遍歷,借助而二分法的思想可以有效降低查詢的時間。

void

binaryinsertsort

(int

*arr,

int size)

else

if(tmp >= arr[mid])

mid =

(left&right)+(

(left^right)

>>1)

;//縮小空間

}//後移元素

for(

int j = idx; j > index; j--

)//插入新元素

arr[index]

= tmp;

}}

下個排序演算法—>希爾排序

排序演算法(1) 插入排序

輸入 n個數的乙個序列 a1,a2 an 輸出 輸入序列的乙個排序 a1,a2,an 滿足a1 a2 an。首先,對於少量元素的排序,插入排序是一種有效的演算法。舉個生動的例子,插入排序就像我們手裡剛剛分到的撲克牌,亂序。我們會將排由左到右進行整理,由小到大排序。待排序列 5 4 3 9 7 5 3...

排序演算法 1 插入排序

插入排序的過程和平時打牌的時候給手裡的牌排序差不多 從牌桌上抽一張牌 把抽到的牌從右到左 或者從左到右 挨個和手裡的牌進行比較,當發現左邊的牌大一些,右邊的牌小一些,就將牌插入到該位置 重複執行步驟1,直到牌抽完了 include include 對範圍 first,last 的元素進行插入排序 p...

演算法(1)插入排序

最近在看 演算法導論 想著將其中涉及到的演算法都實現一遍,這是第一篇,也是剛剛開始。插入排序的演算法大致是這樣的,好比打牌,將桌上的牌在手上實現排序。1.從桌上拿一張牌 2.從後向前與手中的牌面大小進行比較。若相比更小,則說明還沒有到插入的位置,手上的此牌右移一位。3.若相比大,則插入到此牌的前一張...