1、顺序查找
---- 又称线性查找,是从数组的第一个元素开始查找,直到找到待查找元素的位置。
顺序查找适合于存储结构为顺序存储或链接存储的线性表。使用for循环等实现。
int Find(int a[],int x)
{
int index = -1;
for(int i=0;i<(sizeof(a)/sizeof(a[0]));i++)
{
if(a[i]==x)
{
index = i;
break;
}
}
return index;
}
2、二分查找
---- 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好。缺点是:要求待查表为有序表,且插入删除困难。
因此折半查找方法适用于不经常变动而查找频繁的有序列表。
首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功。否则利用中间位置记录将表分成
前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足
条件的记录,即查找成功。或直到子表不存在为止,此时查找不成功。
//递归二分查找
int BiSearch(int data,int *p,int min,int max)
{
int mid = (min + max)/2;
if(data < p[min]||data >p[max])
return -1;
else if(data == p[mid])
return mid;
else if(data > p[mid])
BiSearch(data,p,mid+1,max);//mid已经判断过,所以要排除
else if(data < p[mid])
BiSearch(data,p,min,mid-1);
}