标签:
和直接插入排序相似,但是在查找有序子表的时候采用折半查找
void InsertSort(ElemType A[], int n)
{
int i, j, low, high, mid;
for(i=2; i<=n; i++)//依次将A[2]~A[n]插入到前面已排序序列
{
A[0]=A[i];//复制为哨兵,A[0]不存放元素
low=1;//设置折半查找的范围
high=i-1;
while(low<=high)//折半查找,默认是递增有序
{
mid=(low+high)/2;
if(A[mid].key>A[0].key)//查找左半边子表
high=mid-1;
else//查找右半边子表
low=mid+1;
}
for(j=i-1; j>=high+1; --j)
A[j+1]=A[j];//统一后移元素,空出插入位置
A[high+1]=A[0]; //插入操作
}
}
标签:
原文地址:http://www.cnblogs.com/zhuzhenfeng/p/a325fc8e4226a9b5cc724a7a994e9fe1.html