顺序查找法
#include<stdio.h>
#define ARRAYLEN 8
int source[]={ 69,65,90,37,92,6,28,54};
int SeqSearch(int s[],int n,int key)
{
int i;
for(i=0;s[i]!=key;i++); //循环查找关键字 空循环
if(i<n)
return i; //如果查找成功则返回结果
else
return -1; //如果查找失败则返回失败值
}
int main()
{
int key,i,pos;
printf("请输入关键字:");
scanf("%d",&key);
pos=SeqSearch(source,ARRAYLEN,key);
printf("原数据表:");
for(i=0;i<ARRAYLEN;i++)
printf("%d ",source[i]);
printf("\n");
if(pos>=0)
printf("查找成功,该关键字位于数组的第%d个位置\n",pos);
else
printf("查找失败!\n");
getchar();
return 0;
}
折半查找
#include<stdio.h>
#define ARRAYLEN 10
int source[]={6,12,28,37,54,65,69,83,90,92};
int BinarySearch(int s[],int n,int key)
{
int low,high,mid;
low=0;
high=n-1;
while(low<=high) //查找范围含至少一个元素
{
mid=(low+high)/2; //计算中间位置序号
if(s[mid]==key) //中间元素与关键字相等
return mid; //返回序号
else if(s[mid]>key) //中间元素大于关键字
high=mid-1; //重新定义查找范围
else //中间元素小于关键字
low=mid+1; //重新定义查找范围
}
return -1; //查找失败
}
int main()
{
int key,i,pos;
printf("原数据表:");
for(i=0;i<ARRAYLEN;i++)
printf("%d ",source[i]);
printf("\n");
printf("请输入关键字:");
scanf("%d",&key);
pos=BinarySearch(source,ARRAYLEN,key);
if(pos>=0)
printf("查找成功,该关键字位于数组的第%d个位置\n",pos);
else
printf("查找失败!\n");
getchar();
return 0;
}