改进后的顺序查找
-增加哨兵
减少n次比较
sdut oj 题目: 数据结构实验之查找六:顺序查找.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int n,k;
int i;
while(scanf("%d %d",&n,&k)!=EOF)
{
int data[n+1];
for(i=1; i<=n; i++)
{
scanf("%d",&data[i]);
}
int number=0;
//***********************************************
//比较代码
data[0]=k;//**关键操作**
for(i=n; data[i]!=k; i--)
{
number++;
}
if(i==0)
printf("No\n");
else
{
printf("%d %d\n",i,++number);
}
//比较代码
//***********************************************
}
return 0;
}
二分查找
不用递归
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int B_search(int key,int data[],int l,int r)
{
int mid;
while(l<=r)
{
mid=(l+r)/2;
if(key>data[mid])
l=mid+1;
else if(key<data[mid])
r=mid-1;
else
return mid-1;
}
return -1;
}
int main()
{
int n,m;
int i;
scanf("%d %d",&n,&m);
int data[n+1];
for(i=1; i<=n; i++)
{
scanf("%d",&data[i]);
}
int key;
int o;
for(i=0; i<m; i++)
{
scanf("%d",&key);
o=B_search(key,data,1,n);
printf("%d\n",o);
}
return 0;
}