從關於查詢的討論中可知,對有序表進行折半查詢,其效能優於順序查詢。所以可以將折半查詢思想用於在有序記錄r[1, ...,i-1]中確定應插入的位置,相應的排序法稱為折半插入排序法。折半插入排序是對直接插入排序演算法的改進,在插入某記錄時,採用折半查詢的方法確定插入的位置。
#include#define
maxsize 50
typedef
struct
recordtype; //
記錄型別
void binsort(recordtype
r,int
length) //
折半插入排序
else
}for (int j = i - 1; j >= low; j--) //j
為要插入值的前乙個下標
r[low].key = r[0].key;
}}int main()
; //
待排序列
int length = sizeof(a) / sizeof(a[0]) - 1;
binsort(a, length); //
呼叫函式
for (int i = 1; i <= length; i++)
printf("\n");
return 0;
}
採用折半插入排序法,可減少關鍵字的比較次數。每插入乙個元素,需要比較的次數最大為折半判定樹的深度。雖然折半插入排序法與直接插入排序法相比較,改善了演算法中比較次數的數量級為o(nlog2n),但其並未改變移動元素的時間耗費,所以折半插入排序總的時間複雜度仍然是o(n^2)。
資料結構 折半插入排序
每次插入,都從前面的有序子表中查詢出待插入元素應該被插入的位置 給插入位置騰出空間,將待插入元素複製到表中的插入位置。注意到該演算法中,總是邊比較邊移動元素,下面將比較和移動操作分離開來,即先折半查詢出元素的待插入位置,然後再同意地移動待插入位置之後的所有元素。當排序表為順序儲存的線性表時,可以對直...
資料結構之插入排序 折半插入排序
排序思路 通過折半查詢的方式找到合適的插入位置再插入。演算法實現 public class biinsertsort else 插入點在 mid 1,right left mid 1 直到找到合適的位置 left或right 1 接下來就將left right 1後的元素後移 for int j i...
資料結構 插入排序(直接插入排序 折半插入排序)
二 插入排序 1.直接插入排序 這裡我們注意,元素的選擇是從第二個元素開始!動態過程如下 遞增的 實現 include using namespace std void insertsort int a,int len 若小於前乙個元素,則繼續向前走,前乙個元素後移 演算法分析 優點 簡單,穩定。總...