因为题目要求用最少时间查找,所以这使用折半查找
void SearchExchangeInsert(ElemType a[],ElemType x){
// a是具有n个元素的递增有序线性表,顺序存储
int low=0,high=n-1;
while(low<=high){ //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){ //当x在最后一个位置时,不存在后继交换操作
// 数值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;
}
}