【每日算法】二分查找算法

代碼:

//遞歸版本
int binarysearch(int arr[], int left, int right, int x)
{
	if (NULL != arr&&left <= right)
	{
		int mid;
		mid = (left + right) / 2;
		if (arr[mid] = x)
			return mid;
		else if (arr[mid] > x)
			return binarysearch(arr, left, mid - 1, x);
		else
			return binarysearch(arr, mid + 1, right, x);
	}
	return -1;
}
//非遞歸版本
int binarysearch(int arr[], int left, int right, int x)
{
	if (NULL == arr || left > right)
		return -1;
	int mid;
	while (left <= right)
	{
		mid = (left + right) / 2;
		if (arr[mid] == x)
			return mid;
		else if (arr[mid] > x)
			right = mid-1;
		else
			left = mid+1;
	}
	return -1;
}

舉例子:

1、旋轉數組中最小的數字(劍指offer)、循環有序數組中查找指定元素

2、數組中的元素有重複,要找出x首次出現的位置



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