折半插入排序
算法思路
类似于二分法,不断取半,最后将区间缩减为1.
#include<stdio.h>
#include<stdlib.h>
void BInsertSort(int num[],int n);
int main()
{
int a[8];
for(int i=0; i<8; i++)
{
scanf("%d",&a[i]);
}
BInsertSort(a,8);
for(int j=0; j<8; j++)
{
printf("%d ",a[j]);
}
return 0;
}
void BInsertSort(int num[],int n)
{
int i,j,mid,low,high,key;
for(i=1; i<n; i++)
{
key=num[i];//存储第i个元素
low=0;
high=i-1;//定义初始范围边界
while(low<=high)
{
mid=(low+high)/2;
if(key>num[mid])
{
low=mid+1;//若该元素大于中间值则将范围缩小到后半子区间。
}
else
{
high=mid-1;//反之,缩小到前半个子区间。
}
}
for(j=i-1; j>=high+1; j--)
{
num[j+1]=num[j];//所有元素后移两位。
}
num[high+1]=key;//将目标值插入到正确位置。
}
}