顺序查找与二分查找的代码实现
顺序查找:
基本思想
1.依次扫描A中的所有元素,将每个元素与x比较;
2.如果在i次比较后1<=i<=n搜索成功,即x==A[j],则返回j的值;
3.否则返回0,表示没有找到。
对于一个大小为n的排序数组,算法执行比较的最大次数为n
二分查找:
基本思想
1.令A [low…high]为元素按升序排列的非空数组, A [mid]为中间元素,假定x>A [mid];
2.注意到如果x在A中,则它必定是A[mid+l],A[mid+2] ,…,A[hign]当中的一个;
3.接下来只需在A[mid+1…high]中搜索x。
对于一个大小为n的排序数组,二分查找算法执行比较的最大次数为[log n]+1
C++代码实现;
#include <iostream>
using namespace std;
//通过顺序搜索寻找升序数组A[1..n]中值为x的元素,若A[j]=x,输出j,反之则输出0
int shunxv(int a[], int x,int n)
{
for (int i = 1; i<=n; i ++)
{
if (a[i] == x)
return i;
}
return 0;
}
//通过二分搜索寻找升序数组A[1..n]中值为x的元素,若A[j]=x,输出j,反之则输出0
int erfen(int a[],int x,int n)
{
if (n == 0)
return 0;
int low = 1;
int high = n;
int mid;
while (low <= high)
{
mid= (low + high) / 2;
if (x == a[mid])
{
return mid;
}
if (x < a[mid])
{
high = mid - 1;
}
if (x > a[mid])
{
low = mid + 1;
}
}
return 0;
}
int main()
{
int eg[10] = { 0, 2, 3, 6, 8, 10, 11, 15, 20, 21 };
int n = sizeof(eg) / sizeof(eg[1]) - 1;
cout << "顺序查找1结果:" << shunxv(eg, 1, n) << endl;
cout << "顺序查找20结果:" << shunxv(eg, 20, n) << endl;
cout << "二分查找1结果:" << erfen(eg, 1, n) << endl;
cout << "二分查找20结果:" << erfen(eg, 20, n) << endl;
return 0;
}