一、要点
当A[0]>=mid,说明当前元素应插入min右侧,将左区间low=mid+1
当A[0]<mid,说明当前元素应插入min左侧,将左区间low=mid-1
注:当low>high 时折半查找停止,应将[low, i-1]内的元素全部右移, 并将A[0]复制到low所指位置 当A[mid]==A[0]时,为了保证算法的“稳定性”,应继续在mid所指位置右边寻找插入位置
二.代码
Void HalfInsertSort(int A[],int n){
int i,j,low,heigh,mid;
//1.初始i当前元素之前为有序序列,遍历1-i-1,找到插入位置
for(i=2;i<=n;i++){
A[0]=A[i];
low=1;
heigh=i-1;
while(low<=heigh){
mid=(low+heigh)/2;
if(A[0]>mid)
low=mid+1;
else
heigh=mid-1;
}
//2.从该插入位置至i-1个元素后移1位
for(j=i-1;j>=low;--j){
A[j+1]=A[j];
}
A[heigh+1]=A[0];
}
}