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

代码:

//递归版本
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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章