题目:
线性表(a1,a2,a3,...,an)中的元素递增有序且按顺序存储于计算机内。要求设计一个算法,完成用最少时间在表中查找数值为x的元素,若找到,则将其与后继元素位置相交换,若找不到,则将其插入表中并使表中元素仍递增有序。
思路:
顺序表递增有序,可以使用折半查找,在找到相应位置后,对该位置的元素进行题目要求的操作。
代码:
void SearchExchangeInsert(ElemType A[],ElemType x){
int low=0,high=n-1,mid; //low和high指向顺序表下界和上界的下标
while (low<=high) {
mid=(low+high)/2; //找中间位置
if(A[mid]==x)break; //找到x,退出while循环
else if(A[mid]<x) low=mid+1;//到中点mid的右半部去查
else high=mid-1; //到中点mid的左半部去查
}
if(A[mid]==x&&mid!=n-1){ //查找成功,若最后一个元素与x相等,则不存在与其后继交换的操作
int t;
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; //插入x
}
}
考察内容:
顺序表 折半查找