原理:
顺序查找:
在一个已知无序队列中找出与给定关键字相同的数的具体位置。原理是让关键字与队列中的数从第一个开始逐个比较,直到找出与给定关键字相同的数为止。
二分查找:
在一个已知有序队列中找出与给定关键字相同的数的具体位置。原理是分别定义三个指针low、high、mid分别指向待查元素所在范围的下界和上界以及区间的中间位置,即mid=(low+high)/2,让关键字与mid所指的数比较,若等则查找成功并返回mid,若关键字小于mid所指的数则high=mid-1,否则low=mid+1,然后继续循环直到找出或找不到为止。
源代码:
顺序查找:
int OrderSearch() //顺序查找
{
int i,z;
int a[5]={6,38,52,89,100}; //定义队列
cout<<"请输入一个数:";
cin>>z; //输入关键字
cout<<endl;
for(i=0;i<5;i++)
{
if(z==a[i]) //比较
return i;
else{
}
}
return 10; //若查找不到,返回一个非a[]数组下标的数以便处理
}
二分查找:
int SearchBin() //二分查找
{
int low,high,z,mid; //定义下界和上界以及中间位置的指针及关键字z
int a[5]={6,38,52,89,100};
cout<<"请输入一个数:";
cin>>z;
cout<<endl;
low=0;high=4; //下界和上界所指示的初始位置
while(low<=high)
{
mid=(low+high)/2;
if(z==a[mid])
{
return mid; //若关键字等于mid所指的数
}
else if(z<a[mid])
high=mid-1; //若关键字小于mid所指的数
else
low=mid+1; //若关键字大于mid所指的数
}
return 10; //若查找不到,返回一个非a[]数组下标的数以便处理
}
主函数:
void main()
{
cout<<"=====顺序查找====="<<endl<<endl;
int n;
n=OrderSearch();
if(n!=10)
cout<<"该数是队列中的第"<<n+1<<"个"
<<endl<<endl<<endl;
else //若n=10(找不到时返回的值)
cout<<"队列中无此数"<<endl<<endl<<endl;
cout<<"=====二分查找====="<<endl<<endl;
int m;
m=SearchBin();
if(m!=10)
cout<<"该数是队列中的第"<<m+1<<"个"<<endl<<endl;
else
cout<<"顺序表中没有此数"<<endl<<endl;
}
头文件:#include<iostream.h>