二分查找的思路很簡單,咱們設元素的開始和結尾的元素編號分別爲first和last。
除此以外,還須要設置另外的一個元素mid。
其中mid = (first+last)/2
二分法的實現思路是,每次查找都在以當前序列的中間值爲一個對比點,從而每次都會把查找範圍縮小到當前序列的一半的元素中。 下面是代碼實現:ios
//二分法查找 class Solutions2 { public: searchBin(const vector<int>& nums,int target) { int first = 0; int last = nums.size(); int mid = 0; while(first != last) { mid = (last+first)/2; if(nums[mid] == target) return mid; else { if(target > nums[mid]) first = mid + 1; if(target < nums[mid]) last = mid - 1; } } return -1; } };
下面是測試代碼:函數
#include<iostream> #include<vector> using namespace std; //二分法查找 class Solutions2 { public: searchBin(const vector<int>& nums,int target) { int first = 0; int last = nums.size(); int mid = 0; while(first != last) { mid = (last+first)/2; if(nums[mid] == target) return mid; else { if(target > nums[mid]) first = mid + 1; if(target < nums[mid]) last = mid - 1; } } return -1; } }; //主函數 int main(void) { vector<int> a; a.push_back(1); a.push_back(1); a.push_back(1); a.push_back(2); a.push_back(2); a.push_back(3); a.push_back(4); a.push_back(4); a.push_back(4); a.push_back(4); a.push_back(5); cout<<"after binary search "<<endl; Solutions2 ss; int return_binSort = ss.searchBin(a,3); cout <<"the result is :"<<return_binSort; cout<<endl; return 0; }