C++之最簡單的二分法查找

關於C++中vector使用sort方法進行排序:
第一種情形:基本類型,如vector,vector,vector直接使用;
第二種情形:用自定義的結構體進行sort算法,這時候需要自己定義個比較函數,因爲sort算法是基於容器中的元素是可以兩兩比較的,然後從小到大排序,所以要自定義怎麼樣纔是小於(’<’);
例如:

 struct student
 {
     char name[10];
 	 int score;
 };
 //自定義“小於”
 bool compare(const student &a, const student &b)
 {
	return a.score < b.score;
 }
 sort(vectorStudents.begin(),vectorStudents.end(),comp);

最簡單二分法查找法:

int main()
{
	std::vector<int> vecNumber = { 0,1,4,5,8,12,45,65,23,78,56,79,89};
	sort(vecNumber.begin(), vecNumber.end());
	int nTarget,nTime = 0;
	bool bFind = false;
	cout << "請輸入需要查找的值:" << endl;
	cin >> nTarget;
	auto nBegin = vecNumber.begin();
	auto nEnd = vecNumber.end();
	auto mid = nBegin + (nEnd - nBegin) / 2;

	while (mid != nEnd)
	{
		if (*mid == nTarget)
		{
			bFind = true;
			break;
		}
		else if(nTarget > *mid)
		{
			nBegin = mid + 1;
		}
		else
		{
			nEnd = mid;
		}

		nTime++;
		mid = nBegin + (nEnd - nBegin) / 2;
	}

	if (bFind)
	{
		cout << "二分法找到目標,共用次數爲" << nTime << "次!" << endl;
	}
	else
	{
		cout << "目標不存在,共用次數爲" << nTime << "次!" << endl;
	}

	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章