顺序查找算法
1、如果数据没有排序只能顺序查找,如果排了则可以用二分查找。
#include<iostream>
using namespace std;
int sefind(int *p,int n,int x);
int main()
{
int a[]={1,2,42,3,34,22,23,45,23};
int key=sefind(a,9,23);
return 0;
}
int sefind(int *p,int n,int x)
{
int i;
for( i=0;i<n;++i)
{
if(p[i]==x)
return i;
}
if(i==n)
return -1;
}
折半查找算法
1、使用折半查找算法的前提是数据必须是排序好了的。
#include<iostream>
using namespace std;
int bfind(int *p,int n,int x);
int main()
{
int a[]={1,2,3,4,5,6,7,8,9,0};
int key=bfind(a,10,7);
}
int bfind(int *p,int n,int x)
{
int low=0,high=n-1;
int mid;
while(low<=high)
{
mid=(low+high)/2;
if(x==p[mid])
return mid;
if(x>p[mid])
low=mid+1;
if(x<p[mid])
high=mid-1;
}
return -1;
}
2、用递归的方式实现二分查找
#include<iostream>
using namespace std;
int R(int *p,int x,int left,int right);
int main()
{
int a[]={1,2,3,4,5,6,7,8,9,0};
int key=R(a,7,0,9);
cout<<"在数组中的第"<<key<<"个位置"<<endl;
}
int R(int *p,int x,int left,int right)
{
if(left<right)
{
int middle=(left+right)/2;
if(x<p[middle])
return R(p,7,left,middle);
if(x>p[middle])
return R(p,7,middle,right);
else
return middle;
}
return -1;
}