一、顺序查找
//数组
int SqSearch(int A[],int n,int x){
for(int i=0;i<n;i++){
if(A[i]==x){
reutrn i;
}
}
return 0;
}
//链表 按值查找
int SqSearch(LinkList L,int i,ElmType x){
LNode *p=L; //指针指向头结点
while(p==NULL||p->data!=x){
p=p->next;
}
return p;
}
二、折半查找
顺序表
//非递归算法
void BinarySearch(SqlList L,ElemType x){
int low=0,high=Length-1,mid;
while(low<=high){ //若low>high 则没有x值
mid=(low+high)/2; //指针指向中间元素
if(L->data[mid]>x){ //若x比mid指向数据大,则应该在右半部分查找
high=mid-1;
}else if(L->data[mid]<x){
low=mid+1;
}else if(L->data[mid]==x){
return mid;
}
}
return -1;
}
//递归算法
void BinarySearch(SqlList L,ElemType x,int low,int high){
if(low>high){return 0;} // 查找失败
int mid=(low+high)/2;
if(L->data[mid]>x){ //当mid指向值大于x,则在mid左边查找
return BinarySearch(L,x,low,mid-1);
}else if(L->data[mid]<x){ //当mid指向值小于x,则在mid右边查找
return BinarySearch(L,x,mid+1;high);
}else if(L->data[mid]==x){ //查找成功,返回mid
reutrn mid;
}
}