折半查找,在此做一总结,递归和非递归实现如下所示:
1 //data增序排列 3 //非递归折半查找 4 int binarySearch(int * data, int keyValue, int len){ 5 int low=0,high=len-1,mid=0; 6 while (low<=high) 7 { 8 mid=(low+high)/2; 9 if(data[mid]==keyValue) return mid; 10 else if(data[mid]>keyValue) 11 high=mid-1; 12 else 13 low=mid+1; 14 } 15 return -1; 16 } 17 18 //递归折半查找 19 int* binarySearchRecursion(int * data, int keyValue, int len){ 20 int low=0,high=len-1,mid=0; 21 if(low<=high){ 22 mid=(low+high)/2; 23 if(data[mid]==keyValue) return data+mid; 24 else if (data[mid]>keyValue) return binarySearchRecursion(data,keyValue,mid); 25 else return binarySearchRecursion(data+mid+1,keyValue,high-mid); 26 } 27 return 0; 28 }
递归实现的时候返回的是指针类型的,如果想得到keyValue在data里面的位置,可以使用这个指针减去data即可。