【排序算法】折半插入排序

本篇文章來聊一聊折半插入排序。

基本思想

先來回顧一下直接插入排序的算法思想,就是在前面已經排好序的子序列中尋找一個待插入的位置,然後將待插入元素插入到該位置上。

其中尋找插入位置的過程我們是與每一個元素進行比較,相當於順序查找,我們知道順序查找的效率是比較低的,那麼有沒有辦法能夠提高查找插入位置的效率呢?

很巧的是,前面的序列既然已經是有序的了,我們何不採用折半查找來找出插入位置呢?折半查找的前提就是序列有序,採用折半查找法查找插入位置的插入排序算法,我們稱其爲折半插入排序。

圖解排序過程

折半插入算法非常簡單,前提你得掌握直接插入排序和折半查找的算法,來看一個例子:
在這裏插入圖片描述
原序列的前四個元素已經有序,則從i位置元素開始進行插入排序,先將i位置元素存入下標0作爲哨兵,然後在子序列中尋找待插入位置。

這時我們可以採用折半查找法進行查找,定義三個變量low、high和mid,初始low = 1,high = i - 1,則mid爲2。

讓哨兵位置元素值與mid位置元素值比較,7大於5,所以插入位置應該在右半區,讓low = mid + 1,high不變,繼續折半查找:
html>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章