插入排序有點強

2021-10-10 06:26:36 字數 738 閱讀 3541

乙個有序陣列,插入資料後,仍然要保證有序,我們該怎麼做?其實很簡單,我們只需要遍歷陣列,找到資料應該插入的位置將其插入即可。

將陣列中的資料分為兩個區間,已排序區間和未排序區間。初始已排序區間只有乙個元素,就是陣列的第乙個元素。插入演算法的核心思想是取未排序區間中的元素,在已排序區間中找到合適的插入位置將其插入,並保證已排序區間資料一直有序。重複這個過程,直到未排序區間中元素為空,排序結束。

如果要排序的資料已經是有序的,我們並不需要搬移任何資料。如果我們從尾到頭在有序資料組裡面查詢插入位置,每次只需要比較乙個資料就能確定插入的位置。所以這種情況下,最好是時間複雜度為 o(n)。注意,這裡是從尾到頭遍歷已經有序的資料。如果陣列是倒序的,每次插入都相當於在陣列的第乙個位置插入新的資料,所以需要移動大量的資料,所以最壞情況時間複雜度為 o(n2)。

從實現過程可以很明顯地看出,插入排序演算法的執行並不需要額外的儲存空間,所以空間複雜度是 o(1),也就是說,這是乙個原地排序演算法。

public static void insertionsort(string args) 

for (int i = 1; i < n; ++i) else

}arrpre[j+1] = value; // 插入資料

}for (int e : arrpre)

}

插入排序 折半插入排序

折半插入排序 binary insertion sort 直接插入排序採用順序查詢法查詢當前記錄在已排好序的序列中插入位置,這個 查詢 操作可利用 折半查詢 來實 現,由此進行的插入排序稱之為折半插入排序 binary insertion sort 演算法思想 1 將待排序的記錄存放在陣列r 1.n...

插入排序 折半插入排序

折半插入排序是基於直接插入排序的優化。直接插入排序 將第i個元素插入時,通過折半查詢的方式,來查詢第i個元素合適的位置。當0 i 1 位置上的元素都已經排序ok,現需要插入第i個元素,設其值為temp 令low 0,high i,mid high low 2。那麼temp可能插入的位置是 low h...

插入排序 希爾插入排序

本文借鑑於lsgo實驗室創始人馬老師 演算法 希爾插入排序 delta len nums 2 while delta 0 shell delta,nums delta delta 2return nums defshell delta,key for i in range delta,len key...