对已经排好的数组进行折半查询.
#include<stdio.h>
int search(int arr[],int start,int end,int key)
{
int pos=(start+end)/2;
//no such item:key
if(start>end || (start==end && arr[start]!=key)){
return -1;
}
if(arr[pos]==key){
return pos;
}else if(arr[pos]>key){
return search(arr,start,(start+end)/2-1,key);
}else if(arr[pos]<key){
return search(arr,(start+end)/2+1,end,key);
}
return -1;
}
int main()
{
int arr[7]={1,3,5,7,8,11,24};
int k=search(arr,0,6,8);
printf("%d in arr index is %d",8,k+1);
getchar();
return 0;
}
参考:
1.<算法导论> 第二版2.3-5