【正确答案】先在有序表r中利用二分查找算法查找关键字值等于或小于x的结点,m指向正好等于x的结点或l指向关键字正好大于x的结点,然后采用移动法插入x结点即可。
实现本题功能的程序代码如下:
void bininsert(int A[],int x,int n)
{
int i=0,h=n-1,m,i;
int inplace; //在其位置之前插入x结点
int find=0; //找到插入位置时为1
while(l<=h && find==0)
//稍做改动,便成为二分查找法的非递归实现,读者可尝试
{
m=(l+h)/2;
if(x<A[m])
h=m-1;
else if(x>A[m])
l=m+1;
else
find=1;
}
if(find)
inplace=m;
else
inplace=l;
for(i=n-1;i>=inplace;--i) //采用移动法插入x结点
A[i+1]=A[i];
A[inplace]=x;
}
【答案解析】