求c++程序,折半查找算法

利用递归实现折半查找的C++源程序,快速查找一个数在数列中的位置。(数列与被查找数自行从键盘输入。)具体源代码!~

#include <stdio.h>

int search(int low,int high,int n,int num[]);

void main()
{
int i,n,num[20];
for (i=0;i<=19;i++)
{
num[i]=i+10;
printf("%d ",num[i]);
}
printf("输入要查找的数:");
scanf("%d",&n);
printf("%d\n",search(0,19,n,num));
}
int search(int low,int high,int n,int num[])

{
int mid;
mid = (low+high)/2;
if (n==num[mid])
return mid;
else if(n>num[mid])
search(mid+1,high,n,num);
else
search(low, mid-1,n,num);
} 给分!!!
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-08-26
template <class Record, class Key>
int binary_search( Record * r, const int & low, const int & high, const Key & k )
{
int mid = (low + high)/2;
if( low < high )
{
if( k <= r[mid] )
binary_search( r, low, mid, k );
else
binary_search( r, mid+1, high, k );
}
else if( low == high )
{
if( k == r[mid] )
return low;
else
return -1;
}
else
return -1;
}

//第二个版本的迭代实现(binary_search_v2_iteration)
template <typename Record, typename Key>
int binary_search( Record * r, const int & size, const Key & k )
{
int low=0, high=size-1, mid;
while( low < high )
{
mid = (low + high) / 2;
if( k > r[mid] )
low = mid + 1;
else
high = mid;
}
if( low > high )
return -1;
else
{
if( k == r[low] )
return low;
else
return -1;
}
}
相似回答