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); }
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); } }
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; }
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); }