1.顺序查找
顺序查找的基本思想是让关键字与序列中的数逐个比较,直到找出与给定关键字相同的数为止或序列结束,一般应用于无序序列查找。
#include <iostream>
using namespace std;
int Search(int A[],int n,int find)
{ //顺序查找 n=序列元素个数 find=欲查找数据
int i;
for (i=0; i<n ; i++) if (A[i]==find) return i;
return -1; //未找到
}
#define N 10
int main()
{
int A[N]={18,-3,-12,34,101,211,12,90,77,45}, i,find;
cin>>find;
i=Search(A,N,find);
if(i>=0) cout<<"A["<<i<<"]="<<find<<endl;
else cout<<"not found"<<endl;
return 0;
}
2.二分查找法
对于有序序列,可以采用二分查找法进行查找。它的基本思想是: 升序排列的n个元素集合A分成个数大致相同的两部分,取A[n/2]与 欲查找的find作比较,如果相等则表示找到find,算法终止。如果 findA[n/2],则在A的后半部继续搜索find。
#include <iostream>
using namespace std;
int BinarySearch(int A[],int n,int find)
{ //二分查找 n=序列元素个数 find=欲查找数据
int low,upper,mid;
low=0 , upper=n-1; //左右两部分
while(low<=upper) {
mid = low + (upper-low)/2;//不用(upper+low)/2,避免upper+low溢出
if( A[mid] < find) low = mid+1; //右半部分
else if (A[mid] > find) upper = mid - 1; //左半部分
else return mid; //找到
}
return -1; //未找到
}
#define N 10
int main()
{
int A[N]={8,24,30,47,62,68,83,90,92,95},i,find;
cin>>find;
i=BinarySearch(A,N,find);
if(i >= 0) cout<<"A["<<i<<"]="<<find<<endl;
else cout<<"not found"<<endl;
return 0;
}