基礎演算法 直接插入排序

2021-09-23 18:39:57 字數 954 閱讀 9293

它的演算法思想是:把要排序的陣列分為了兩個部分, 一部分是經過插入排序後有序的部分, 另一部分是除去第一部分待插入的元素; 先將第一部分排序完成, 然後再插入這個元素.。

插入排序由於操作不盡相同, 可分為直接插入排序,折半插入排序(又稱二分插入排序),鍊錶插入排序,希爾排序。我們先來看下直接插入排序。

直接插入排序的基本思想是:將陣列中的所有元素依次跟前面已經排好的元素相比較,如果選擇的元素比已排序的元素小,則移動交換,直到全部元素都比較過為止。見下圖

一般來說,插入排序都採用in-place在陣列上實現。具體演算法描述如下:

①. 從第乙個元素開始,該元素可以認為已經被排序

②. 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄

③. 如果該元素(已排序)大於新元素,將該元素移到下一位置

④. 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置

⑤. 將新元素插入到該位置後

⑥. 重複步驟②~⑤

見下圖

public static void insertionsort(int arr)  else 

}} }

直接插入排序複雜度如下:

平均時間複雜度

最好情況

最壞情況

空間複雜度

o(n²)

o(n)

o(n²)

o(1)

tips: 由於直接插入排序每次只移動乙個元素的位, 並不會改變值相同的元素之間的排序, 因此它是一種穩定排序。

演算法基礎 直接插入排序

一 直接插入排序 基本思想 每次將乙個待排序的序列的乙個元素,插入到已經排好序的序列中。如待排序列a 假設我們希望序列是從下到大排列的,那麼,首先將序列a分解為a1 和a2 其中a1作為排好的序列,這樣一來,首先從a2中取第乙個元素 1,與a1中的1比較,按從下到大順序把 1放入a1中,a2的其他元...

基礎演算法 直接插入排序

把陣列劃分為左右兩個區域,有序區和無序區,開始有序區只有乙個元素,就是陣列最左邊的元素。每次取得無序區第乙個元素x,從有序區最右邊的值開始到最左邊,把比x大得元素都往後移動乙個位置,直到找到乙個不大於x的位置,或者到了最左邊 即有序區所有元素都比x大,x應該插入到最前面 停下來的位置就是插入元素x的...

基礎演算法 直接插入排序

少壯不努力,老大刷水題。過去讀書的時候因為腦子不好使,很多概念,公式,演算法都記不住,等長大了,營養趕上來了,才學習的時候就會覺得更加的深刻。直接插入排序就像平常我們打撲克牌一樣,我們總是在別人發牌的時候,拿到一張牌就把它插到合適的位置上,這個過程中我們的肉眼和大腦做了3件事 1 拿到新的牌,檢查這...