資料結構 折半插入排序

2021-08-09 15:42:58 字數 852 閱讀 6919

從關於查詢的討論中可知,對有序表進行折半查詢,其效能優於順序查詢。所以可以將折半查詢思想用於在有序記錄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 若小於前乙個元素,則繼續向前走,前乙個元素後移 演算法分析 優點 簡單,穩定。總...