//arr:关键字
//n:关键字个数
void BInsertSort(int arr[],int n)
{
int temp,i,j,low,high,mid;
//i从1开始,将arr[0]视作有序序列
for(i = 1; i <=n; ++i)
{
temp = arr[i];
//low和high分别指向有序序列的首部和尾部
low = 0;
high = i-1;
//折半查找
while(low <= high)
{
mid = (low + high)/2;
//如果有序序列中部的关键字比要插入的关键字大
if(arr[mid] > temp)
//则插入点在低半区,将high调整到低半区
high = mid - 1;
else
//否则插入点在高半区,将low调整到高半区
low = mid +1;
}
//将high之后的关键字全部后移一位
for(j = i-1; j >= high + 1;j--)
arr[j+1] = arr[j];
//关键字插入点在high指向的关键字后边
arr[high + 1] = temp;
}
}
折半插入排序代码
最新推荐文章于 2023-07-03 22:18:52 发布