int HalfSearch(int a[], int m, int n,int key) { int k; int flag = 0; if (a[m] == key) { return flag = m+1; } if (a[n] == key) { return flag = n+1; } if (key > a[n] || key < a[m]) { return 0; } k = (m+n)/2; if (a[k] == key) { return flag = k+1; } if (a[k] > key) { return flag = HalfSearch(a,m+1,k-1,key); } if (a[k] < key) { return flag = HalfSearch(a,k+1,n-1,key); } return 0; }
int main( void ) { int n, m; while ( scanf("%d", &n) != EOF ) {m = HalfSearch( n ); if ( m != -1 ) printf("查找成功!元素%d位于该数组的第%d个位置.\n", n, m); else printf("查找失败!该数组没有元素%d.\n", n);} return 0; }
int main(){ int arr[LEN] = {18,15,1,2,19,20,3,12,13,14,20,15,20,4,5,6,7,16,17,10,15,8,9,10,11,20}; int i,index; printf("array for search:\n"); for(i = 0; i < LEN; i++){ printf("%d ",arr[i]); } index = HalfSearch(arr,0,LEN-1,19); printf("\nindex of 19:%d\n",index); }
int main(void) { /*递归的折半查找算法*/ int flag; int key; int arr[10] = {2,3,5,7,8,10,12,15,19,21}; printf("请输入要查找的项:"); scanf("%d",&key); flag = HalfSearch (arr,0,9,key); if (flag) { printf("所查找的数%d位于第%d个\n",key,flag); } else { printf("没有所要查的数。\n"); } getch(); return 0; }
int HalfSearch(int arr[], int low, int high, int num) { int mid; mid = (low+high) / 2; if( (low>=high) && (arr[mid]!=num) ){ return -1; } else { if(arr[mid]==num){ return mid; } else if(arr[mid]>num){ high = mid-1; } else{ low = mid+1; } return HalfSearch(arr,low,high,num); } }