用最少的时间,在递增有序顺序表中查找元素x,若找到,与后继元素位置互换,若找不到,插入其中,使顺序表仍递增有序。
算法思想:顺序存储的线性表递增有序,可以顺序查找,也可以折半查找。若要使用最少的时间,应使用折半查找法。
void SearchExchangeInsert(ElemType A[],ElemType x){
//顺序表长度为n
int low=0,high=n-1,mid;//low-》下界,high-》上届
while(low<=high){
mid=(low+high)/2;//找中间位置
if(A[mid]==x)
break;//找到
else if(A[mid]<x)//在表的右半部分找
low=mid+1;
else//在表的左半部分找
high=mid-1;
}
if(A[mid]==x&&mid!n-1){//若最后一个元素与x相等,就不存在与其后继元素交换的操作
int t=A[mid];
A[mid]=A[mid+1];
A[mid+1]=t;
}
if(low>high){//查找失败,插入x
for(int i=n-1;i>high;i--) A[i+1]=A[i];//后移
A[i+1]=x;//插入
}
}