问答题 编写一个函数,利用二分查找算法在一个有序表中插入一个元素x,并保持表的有序性。
【正确答案】先在有序表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; }
【答案解析】