题目描述:
线性表中元素递增有序且按顺序存储与计算机内。要求设计一算法完成:
(1)用最少时间在表中查找数值为x的元素
(2)若找到将其与后继元素位置交换
(3)若找不到,将其插入表中并使表中元素仍递增有序
思路:
用二分查找法进行查找,时间复杂度为O(logn)。
代码:
int flag=0;//默认没找到元素x
void swapOrInsert(int a[],int &length,int low,int high,int x){
int index=halfSearch(a,low,high,x);
if(flag==1){
//进行交换
if(index<length-1){
swap(a[index],a[index+1]);
}
else{
cout<<"找到的元素是末尾元素,无法进行交换"<<endl;
}
}
else{
//进行插入
insert(a,length,index,x);
}
}
int halfSearch(int a[],int low,int high,int x){
//经验来说,二分查找最后返回一个mid下标,再用其他函数对mid下标位置周围的元素进行操作
int mid;
while(low<=high){
mid=(low+high)/2;
if(a[mid]==x){
flag=1;
return mid;
}
else if(a[mid]>x)
high=mid-1;
else
low=mid+1;
}
return mid;
}
v