基於C++模板的二分查找

因爲發現stl裏面帶了binary_search,以後可以不用給自己寫了,怕自己不會寫,所以自己先實現了一個二分查找。

我的這個二分查找不是返回true和false,而是返回iterator,當查找不到的時候,返回end()

#include <iostream>
#include <vector>
using namespace std;

template <class BidirectionIterator, class T>
BidirectionIterator binary_search(BidirectionIterator begin, BidirectionIterator end, T target) {
	BidirectionIterator mid, end_reserve = end, last_mid;
	mid = begin + (end-begin)/2;
	while(begin != end && mid != last_mid) {
		if(*mid == target) {
			return mid;
		}
		else if(*mid > target) {
			end = mid;
			mid = begin + (end-begin)/2;
		}
		else {
			begin = mid;
			mid = begin + (end-begin)/2;
		}	
		last_mid = mid;
	}
	return end_reserve;
}

int main() {
	vector<int> v{1,2};
	vector<int>::iterator itr;
	itr = binary_search(v.begin(),v.end(), 3);
	if(itr != v.end()) {
		cout << "Found and the position is " << itr - v.begin() << endl;
	}
	else{
		cout << "Not found!" << endl;
	}
}


發佈了42 篇原創文章 · 獲贊 6 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章