分治法——二分搜素

分治法是一种把事情规模变小而保持事物性质不发生变化的一种方法。
二分搜素算法是运用分治法策略的典型例子。

二分搜索要点

简单来说,它就是把一组已排好序的数字不断对中间数进行比较,若目标值比中间值小,则往左继续搜索;反之,往右。

二分搜索图例

举例代码如下:

#include<stdio.h>

int BinarySearch(int *a, int x, int n)
{
	int left = 0, right = n;
	int time = 1;

	while (left<=right)  //保证搜索能够正常进行
	{
		int middle = (left + right) / 2;

		if (x == a[middle])  //找到目标值
		{
			printf("第%d次找到目标值!",time);
			return middle;
		}
			
		if (x < a[middle])  //比目标值小,往左继续搜索
		{
			printf("第%d次搜索\n", time);
			printf("下一次搜素范围:\n");
			for (int i = 0; i < middle; i++)
				printf("%d	", a[i]);
			printf("\n");
			time += 1;
			right = middle - 1;
		}
		else  //比目标值大,往右继续搜索
		{
			printf("第%d次搜索\n", time);
			printf("下一次搜素范围:\n");
			for (int i = 0; i < middle; i++)
				printf("%d	", a[i]);
			printf("\n");
			time += 1;
			left = middle + 1;
		}
	}

	return -1; //未找到对应目标值
}

int main()
{
	int a[10] = { 3,5,7,9,15,17,25,36,55,85 };
	int x = 5;

	BinarySearch(a, x, 10);

	return 0;
}

结果如下:

第1次搜索
下一次搜素范围:
3 5 7 9 15
第2次搜索
下一次搜素范围:
3 5
第3次搜索
下一次搜素范围:
第4次找到目标值!

posted @ 2017-07-04 19:27  Kirby  阅读(165)  评论(0)    收藏  举报