#include "stdio.h"
#include <vector>
#include <iostream>
using namespace std;
int binarySearch(const vector<int> & a, const int & x, int low, int high)
{
if(low>high)
return -1;
int mid = (low + high)/2;
//二分查找法的递归核心部分
if(a[mid]<x)
return binarySearch(a, x, mid+1, high);
else if(x<a[mid])
return binarySearch(a, x, low, mid-1);
else
return mid;
}
int Search(const vector<int> & a, const int & x)
{
return binarySearch(a, x, 0, a.size()-1);
}
void main()
{
vector<int> box;
box.push_back(1);
box.push_back(4);
box.push_back(6);
box.push_back(7);
box.push_back(8);
box.push_back(10);
box.push_back(13);
box.push_back(21);
box.push_back(22);
box.push_back(30);
const int searchValue = 22;
int result = Search(box, searchValue);
if(result == -1)
cout<<"要查的数字不在数组内!"<<endl;
else
cout<<searchValue<<"的位置在第"<<++result<<"位"<<endl;
}
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
//二分查找法
int binarySearch(const vector<int> &arr,const int data,int low,int hight)
{
if(low > hight) return -1;
int mid=(low+hight)/2;
if(arr[mid] <data)
return binarySearch(arr,data,mid+1,hight);
else if(arr[mid] > data)
return binarySearch(arr,data,low,mid-1);
return mid;
}
int do_search(const vector<int> &arr,const int data)
{
return binarySearch(arr,data,0,arr.size()-1);
}
int main() {
vector<int> arr;
arr.push_back(8);
arr.push_back(1);
arr.push_back(4);
arr.push_back(6);
arr.push_back(7);
arr.push_back(28);
arr.push_back(10);
arr.push_back(13);
arr.push_back(22);
arr.push_back(25);
sort(arr.begin(),arr.end());
std::copy(arr.begin(), arr.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout<<std::endl;
int searchValue=13;
int result=do_search(arr,searchValue);
if(result == -1)
{
cout<<"要查找的数字不在数组内"<<endl;
}else{
cout<<searchValue<<"的位置在第"<<++result<<"位"<<endl;
}
searchValue=136;
result=do_search(arr,searchValue);
if(result == -1)
{
cout<<"要查找的数字不在数组内"<<endl;
}else{
cout<<searchValue<<"的位置在第"<<++result<<"位"<<endl;
}
return 0;
}