排序-插入排序-折半插入排序-数据结构(27)

来源:互联网 发布:设备动静密封点数据 编辑:程序博客网 时间:2024/05/19 13:44

一、折半插入排序

实质上是插入排序,只是在搜索位置的时候用到二分查找。


二、算法实现

int sqTable[] = { 0,49,38,65,97,76,13,27,49};//其中[0]位置储存的是哨岗int length = (sizeof(sqTable) / sizeof(int))-1;//不要第一个位置void PrintTable(){for (int i = 1; i <= length; i++){printf("%d:", sqTable[i]);}printf("\n");}
//折半插入排序=========================void BInsertSort(){for (int i = 2; i <= length; i++){//相对直接插入排序 在找j的位置利用了折半查找//哨岗位置赋值sqTable[0] = sqTable[i];int low = 1;int high = i - 1;//int index;//用二分查找寻找index的位置 while (low <= high){int mid = (low + high) / 2;if (sqTable[0] < sqTable[mid]){//左半边high = mid - 1;}else {//右半边low = mid + 1;}}//找到j该在的位置 进行插入从[index....i]向后移动一格子for (int k = i-1; k >= high+1; k--){sqTable[k + 1] = sqTable[k];}sqTable[high + 1] = sqTable[0];}}