二分查找算法(分治)||C++實現

目錄

非遞歸

遞歸

時間複雜度


二分查找算法是查找算法裏面非常簡單的一個,這裏給出二分查找算法的遞歸和非遞歸的代碼。

注意:二分查找算法的前提是序列有序。

非遞歸

//假設arr從小到大有序,找見返回下標,找不見返回-1
int BinarySearch(int* arr, int len,int key)
{
	assert(arr != NULL && len > 0);
	int left = 0;
	int right = len - 1;
	while (left <= right)
	{
		int mid = (left + right) / 2;
		if (arr[mid] == key)
			return mid;
		if (arr[mid] < key)
			left = mid + 1;
		else
			right = mid- 1;
	}
	return -1;
}

遞歸

//假設arr從小到大有序,找見返回下標,找不見返回-1
int BinarySearch(int* arr, int begin,int end,int key)
{
	if (begin > end)
		return -1;
	int mid = (begin + end) / 2;
	if (arr[mid] == key)
		return mid;
	if (arr[mid] > key)
		BinarySearch(arr, begin, mid - 1, key);
	else
		BinarySearch(arr, mid+1, end, key);
}

時間複雜度

很容易看出二分查找的時間複雜度爲O(logn)

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