示例#1
0
int biSearch(int *data, int *hit, int start, int end, int target){
    int index=0;
    if (start>end){
	*hit=-1;
	return end;
    }
    index=(start+end)>>1;
    if (data[index] == target){
	*hit=0;
	return index;
    }
    if (data[index] > target)
	return biSearch(data, hit, start, index-1, target);
    return biSearch(data, hit, index+1, end, target);
}
示例#2
0
int main()
{
	int arry[6]={1,3,5,7,9,11};
	int ret = biSearch(arry,6,3);
	printf("search result is ret=%d\n",ret);
	return 0;
}
 int biSearch(int A[] ,int n, int target ,int start ,int end){
     if(start>end) return -1;
     int middle=(start+end)/2;
     if(A[middle]==target) return middle;
     
     if(A[start]<=A[middle]){
         if(target<A[middle]&&target>=A[start]) return biSearch(A,n,target,start,middle-1);
         else return biSearch(A,n,target,middle+1,end);
     }
     else{
         if(target>A[middle]&&target<=A[end]) return biSearch(A,n,target,middle+1,end);
         else return biSearch(A,n,target,start,middle-1);
         
     }
     
     
     
 }
示例#4
0
int main(int argc, char** argv){
	int hit = 0;
	int i70 = 0, i78 = 0, i80 = 0;
	/*printf("%d\n", biSearch(A, &hit, 0, 8, 70));
	printf("%d\n", biSearch(A, &hit, 0, 8, 78));
	printf("%d\n", biSearch(A, &hit, 0, 8, 80));*/
	i70 = biSearch(A, &hit, 0, 8, 70);
	if (!hit) printf("70 found at %d.\n", i70);
		else printf("70 not found. The greatest number less than 70 is found at %d being %d.\n", i70, A[i70]);
	//hit = 0;
	i78 = biSearch(A, &hit, 0, 8, 78);
	if (!hit) printf("78 found at %d.\n", i78);
		else printf("78 not found. The greatest number less than 78 is found at %d being %d.\n", i78, A[i78]);
	//hit = 0;
	i80 = biSearch(A, &hit, 0, 8, 80);
	if (!hit) printf("80 found at %d.\n", i80);
		else printf("80 not found. The greatest number less than 80 is found at %d being %d.\n", i80, A[i80]);
	return 0;
}
示例#5
0
文件: 3-6.c 项目: wwzyhao/Algorithms
int biSearch(int n, int left, int right) {
	if(right - left > 1) {
		int middle = (left + right) / 2;
		if(n < num[middle])
			return biSearch(n, left, middle);
		if(n > num[middle])
			return biSearch(n, middle, right);
	}
	else 
		return right;
	ever
	{
		if(n == num[left])
			return left;
		if(n == num[right])
			return right;
		else 
			return -999;
	}
}
 int search(int A[], int n, int target) {
     if(n<1) return -1;
     return biSearch(A,n,target,0,n-1);
 }