有序数组中二分法查找

二分法查找适用于数据量较大时,但是数据需要先排好顺序。

首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。
如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤1的操作。
如果某一步数组为空,则表示找不到目标元素。

时间复杂度为:O(log2n)。

当所给数组为无序数组时,想用二分法查找某元素则需要先进行排序,在进行二分法查找。

#include<stdio.h>
#include<math.h>
int binary_search(int arr[], int k, int sz)
{
	int left = 0;
	int right = sz - 1;
	int mid = 0;

	while (left <= right)
	{
		mid = left + (right - left) / 2;
		if (arr[mid] == k)
			return mid;
		else if (arr[mid] > k)
			right = mid - 1;
		else
			left = mid + 1;
	}
	return -1;
}

int main()
{
	int key;
	scanf("%d", &key);
	int arr[10] = { 1, 3, 5, 6, 7, 9, 10, 13, 16, 88 };

	int sz = sizeof(arr) / sizeof(arr[0]);


	int ret = binary_search(arr, key, sz);

	if (ret == -1)
		printf("找不到\n");
	else
		printf("找到了:%d\n", ret + 1);

	return 0;
}
发布了43 篇原创文章 · 获赞 41 · 访问量 1799

猜你喜欢

转载自blog.csdn.net/weixin_45662626/article/details/102725227