折半插入排序

时间:2022-05-12 21:40:50

折半插入的本质上,依旧是插入排序,只是在寻找插入点的时候将使用折半查找,用以减少查找数据的次数。

数组的第0个元素不在排序序列中,用来保存将要插入的数据。

折半插入排序

//折半直接插入排序
void BinsrySort(int *a, int length)
{
//第0号元素不使用
for (int i = 1; i < length; i++)
{
a[0] = a[i];

int j = i - 1;
int low = 1;
int high = i - 1;
int mid = (low + high) / 2;

while (low<=high)//
{

if (a[mid] >= a[0])//稳定版
{
high = mid - 1;
}
else
{
low = mid + 1;
}
mid = (high+low)/2;
}
//low 做为标准

for (j = i - 1; j >= low; j--)
{
a[j + 1] = a[j];
}
a[low] = a[0];

}
}