一、什麼是二分插入排序?
設在資料表中有乙個元素序列v[0],v[1],v[2]......v[n].其中v[0],v[1],v[2]......v[i-1]是已經排好序的元素。在插入v[i]。利用折半搜尋尋找v[i]的插入位置。同時,二分插入排序是一種穩定的排序。當n較大時,總排序碼比較次數比直接插入排序的最差情況好得多,但比最好情況要差,所元素初始序列已經按排序碼接近有序時,直接插入排序比二分插入排序比較次數少。二分插入排序元素移動次數與直接插入排序相同,依賴於元素初始序列。
事實上,我們可以將二分插入排序理解為直接插入排序的一種改進,利用二分的思想減少了對比的次數。
時間複雜度:雖然二分插入排序中,找到插入的位置的平均時間是o(nlogn),但是移動元素仍需要o(n^2)的時間。所以總的來說,二分插入排序的時間複雜度仍然是o(n^2)。
二、演算法思想:
利用二分查詢找出位置,然後插入。
三、**實現:
void binaryinsert_sort(int* nums, int length)
for (int j = i; j > low; --j)
nums[j] = nums[j - 1];
nums[low] = nums[0];
}
C 插入演算法及二分插入演算法
一 直接插入演算法 1 思路 對於乙個給定的有n個元素的序列,1.我們從第一元素 i 1 開始作為乙個關鍵字,此關鍵字左邊的元素為已經排好序,2.把關鍵字插入到左邊排好序的序列中,方法為 把關鍵字其左邊的序列的每個元素從左到右逐個比較,當序列中的元素比關鍵字大時向後移動乙個位置,直到找到比關鍵字小的...
演算法學習之路 二分查詢
描述 給定乙個單調遞增的整數序列,問某個整數是否在序列中。輸入 第一行為乙個整數n,表示序列中整數的個數 第二行為n n不超過10000 個整數 第三行為乙個整數m m不超過50000 表示查詢的個數 接下來m行每行乙個整數k。輸出 每個查詢的輸出佔一行,如果k在序列中,輸出yes,否則輸出no。輸...
資料結構與演算法學習二
1 用js中object物件模擬集合set的資料結構 set集合中的資料結構 s s 即集合中的鍵 值相同。故,可令object物件中的鍵 值相同,來模擬set集合及其中的方法,如下 用js中object模擬實現集合set資料結構 es6中有set類,避免混淆這裡用set2 var set2 fun...