二分查詢(c++)

Eighteen__發表於2020-10-25

二分查詢
二分查詢也稱折半查詢(Binary Search),它是一種效率較高的查詢方法。但是,折半查詢要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排列。它充分利用了元素間的次序關係,採用分治策略,可在最壞的情況下用O(log n)完成搜尋任務。它的基本思想是:(這裡假設陣列元素呈升序排列)將n個元素分成個數大致相同的兩半,取a[n/2]與欲查詢的x作比較,如果x=a[n/2]則找到x,演算法終止;如 果x<a[n/2],則我們只要在陣列a的左半部繼續搜尋x;如果x>a[n/2],則我們只要在陣列a的右 半部繼續搜尋x。

在這裡插入圖片描述

#include<iostream>
#include<vector>
using namespace std;
int search_binary(vector<int>v, int value)
{
	int low = 0;
	int high = v.size() - 1;
	int mid = (low + high) / 2;
	while (low <= high)
	{

		if (v[mid] == value)
		{
			return mid;
		}
		else if (value < v[mid])
		{
			high = mid-1;
		}
		else
		{
			low = mid + 1;
		}
		mid= (low + high) / 2;
	}
	return -1;
}
void main()
{
	vector<int>v{ 8,11,19,23,27,33,45,55,67,98 };
	cout << search_binary(v, 10);
}

相關文章