二分搜索

我觉得要了解这两种策略,除了多刷题没别的方法。

二分搜索
#include <stdio.h> #include <stdlib.h> int BinSerach(int a[], int first, int LEN,int j) { if(j == a[(first + LEN)/2]) return j; if(j < a[(first + LEN)/2]) return BinSerach(a, first, (first + LEN)/2, j); if(j > a[(first + LEN)/2]) return BinSerach(a, (first + LEN)/2, LEN, j); printf("no this intger\n"); } int main() { const int LEN = 1000; int a[LEN]; int i; for(i = 0; i < LEN; i++) a[i] = i; int j; printf("请输入数字:"); scanf("%d", &j); if(j > a[LEN - 1]) { printf("no seek"); exit(0); } getchar(); getchar(); j = BinSerach(a, 0, LEN - 1,j); printf("output:%d \n", j); }

 

这是我仿照july大神实现的一个二分搜索算法
我上面写的是啥。天哪
void binary_search(int arry[], int n, int value)
{
	int left = 0;
	int right = n - 1;

	while(left <= right)
	{
		int middle = left + ((right - left)>>1);

		if(a[middle] < value)
		{
               left = middle + 1;
		}
		else if(a[middle] > value)
		{
			   right = middle - 1;
		}
		else
		{
			return middle;
		}
	}

	return -1;
}
			   

  

posted @ 2014-03-14 16:18  elroyzhang  阅读(172)  评论(0编辑  收藏  举报