C语言实现折半插入排序代码如下:
#include<stdio.h>
#define N 10000//定义数组最大长度10000
void BinaryInsertSort(int s[],int n)//自定义折半插入排序函数,s为数组名,n为数组长度
{
int i,position,t,k;//position为s[i]经折半查找所确定的位置
for(i=1;i<n;i++){//下标从0开始,从i=1开始向前插入
int l=0,r=i;
int half;
while(l<r){//该循环通过二分法确定s[i]位置(position)
half=(l+r)/2;
if(s[i]>s[half]){
l=half+1;
position=l;
}
else if(s[i]<s[half]){
r=half;
position=r;
}
else{
position=half;
break;
}
}
if(i!=position){//表示s[i]需要向前插入
t=s[i];//保存s[i],便于其他数据向后移位
for(k=i-1;k>=position;k--)
s[k+1]=s[k];
s[position]=t;
}
}
}
int main()
{
int s[N];
int n,i;
printf("请输入待排数组长度:\n");
scanf("%d",&n);//扫描数组长度
printf("请输入待排数组:\n");
for(i=0;i<n;i++)
scanf("%d",&s[i]);//扫描数组
BinaryInsertSort(s,n);//将数组通过自定义的折半插入排序函数进行排序
printf("排序结果如下:\n");
for(i=0;i<n;i++)
printf("%d ",s[i]);//输出排序结果
return 0;
}