1.顺序查找
适合对象——无序或有序队列;
基本思想:逐个比较,直到找到或者查找失败;
时间复杂度o(n);
//n 数组长度,key 查找关键字,a为数组
int Sequential_Search(int key,int n,int *a)
{
int i;
for(i = 1;i<=n;i++)
{
if(a[i] == key)
return i;
}
return 0;
}
改进的算法,设置哨兵,效率比第一个高
int Seqential_Search_new(int key,int n,int *a)
{
int i;
a[0] = key;/*//key作哨兵,减少用for循环判断下标是否越界的操作*/
i = n;/*循环从尾部开始*/
while(a[i] != key)
{
i--;
}
return i;/*返回0 则查找失败*/
}
2.折半查找
适用于:有序表,且限于顺序存储结构(线性链表无法进行折半查找)
基本思想:在有序表中,取中间记录最为比较对象。边界条件:若查找值与中间记录值相等,则查找成功;
否则小于中间值,则在左半区继续查找;大于中间值在右半区查找, 时间复杂度o(logn)。
int Binary_Search(int *a,int n,int key)
{
int low,high,mid;
low = 1;
high = n;
while(low <= high)
{