一、折半查找
1.迭代折半查找
#include <iostream>
using namespace std;
// return the position of array
int Binary_Search(int *a, const int x, const int n)
{
int left = 0, right = n - 1;
while (left <= right)
{
int mid = left + right >> 1;
if (x < a[mid]) right = mid - 1;
else if (x > a[mid]) left = mid + 1;
else return mid;
}
return -1;
}
int main()
{
int a[] = {1,2,3,4,5,6,7,8,9};
cout << Binary_Search(a,7,9);
return 0;
}
2.递归折半查找
#include <iostream>
using namespace std;
// return the position of array
int Binary_Search(int *a, const int x, const int left, const int right)
{
int mid = (left + right >> 1);
if (left < right)
{
if (x < a[mid])
return Binary_Search(a, x, left, mid - 1);
else if(x > a[mid])
return Binary_Search(a, x, mid + 1, right);
else
return mid;
}
return -1;
}
int main()
{
int a[] = {1,2,3,4,5,6,7,8,9};
cout << Binary_Search(a,7,0,8);
return 0;
}