#include "stdio.h"
#include "malloc.h"
typedef int KeyType;
typedef int DataType;
typedef struct {
//排序码字段
KeyType key;
//记录的其他字段
DataType info;
}RecordNode;
typedef struct
{
int n;
RecordNode * record;
}SortObject;
void binSort(SortObject * pvector)
{
int i,j,left,right,middle;
RecordNode temp;
for(i=0;i<pvector->n;i++)
{
temp=pvector->record[i];
left=0;
right=i-1;
while (left<=right)
{
middle=(left+right)>>1;
if (temp.key<pvector->record[middle].key)
{
right=middle-1;
}
else
{
left=middle+1;
}
}
for(j=i-1;j>=left;j--)
{
pvector->record[j+1]=pvector->record[j];
}
if (left!=i)
{
pvector->record[left]=temp;
}
}
for(i=0;i<pvector->n;i++)
{
printf("%d ",pvector->record[i]);
}
}
int main(int argv ,char * argm[])
{
int i,j=0,l,p;
SortObject * object=(SortObject *)malloc(sizeof(SortObject));
RecordNode * node=(RecordNode *)malloc(sizeof(RecordNode));
printf("请输入数组的长度 \n");
scanf("%d",&i);
p=i;
while (i>0)
{
printf("请输入数组的字段 \n");
scanf("%d",&l);
node[j].key=l;
j++;
i--;
}
object->record=node;
object->n=p;
binSort(object);
return 1;
}
结果:

当n较大时,显然比直接插入排序的最大比较次数少的多。但大于直接插入排序的最小比较次数。移动次数,最坏的情况为n²/2,最好的情况为n-1,平均移动次数为O(n²).算法中增加了一个辅助空间temp,因此,算法的辅助空间为S(n)=O(1)。二分法插入排序是稳定的。
来源:https://www.cnblogs.com/yucong/archive/2012/05/17/2506945.html