由於插入排序的基本操作是在乙個有序表中進行查詢和插入,則這個查詢操作可以利用折半(二分)查詢來實現,由此進行的插入排序稱之為折半插入排序。
輸入:順序表的長度,順序表中各個元素。
輸出:排好序的順序表中各個元素。
執行結果:
首先是輔助巨集:
#define ok 1
#define error 0
#define true 1
#define false 0
#define overflow -1
#define null 0
typedef char *infotype;
typedef int keytype; //設關鍵字為整型
順序表的儲存結構定義:
typedef struct
redtype;
//順序表的儲存結構定義
typedef struct
sqlist;
演算法實現:
void binsertsort(sqlist &l)
}
複製元素r2到r1
void redcopy(redtype &r1,redtype r2)
演算法分析:折半插入排序就平均效能來說比直接插入排序要快,當n較大時總比較次數比直接插入排序的最壞情況要好的多。但物件的初始序列已基本有序時不如直接插入排序好。
當原序列有序時,折半插入排序在插入第i個物件時最壞需經過logi + 1次比較來定位插入位置。
減少了比較次數,但是沒有減少移動次數,平均效能優於直接插入排序。
時間複雜度o(n^2)
空間複雜度o(1)
是一種穩定的排序演算法。
插入排序 折半插入排序
折半插入排序 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...
插入排序 折半插入排序
package sort 折半插入排序 當序列是連續儲存時,對直接插入排序進行的改進 插入位置可以更快速找到 直接插入排序a 0 用作哨兵減少條件判斷,折半插入排序不需要哨兵a 0 位置存放實際元素 public class insertsort 統一後移,空出插入位置 for j i 1 j hi...