题目描述:
线性表(a1,a2,a3,a4,…,an)中的元素递增有序且按顺序存储在计算机中,要求设计一个算法,完成用最少的时间在表内查找数值为x的元素,若找到则将其与后继元素交换,否则则将其插入表中,使其继续递增有序。
算法思想:
顺序存储的线性表递增有序,可以顺序查找,也可以折半查找,要求时间最少,则采用折半查找。
代码如下:
void Search(ElemTpye a[] ,ElemType x){
int low=0,high=n-1,mid; //low和high指向上下界的下标
while(low<=high){ //查找
mid=(low+high)/2;
if(a[mid]==x) break;
if(a[mid]<x) low=mid+1;
else high = mid-1;
}
if(a[mid]==x && mid!=n-1){ //若最后一个元素与x相等,则不存在与其后继交换的操作
t=a[mid];
a[mid]=a[mid+1];
a[mid+1]=t;
}
if(low>high){ //查找失败,插入元素x
for(i=n-1;i>high;i--)//后移元素
a[i+1]=a[i];
a[i+1]=x;
}
}