使用遞歸的方式實現二分查找,代碼中輸出用的c++,如果是c的話,只要將頭文件改成#include<stdio.h>,刪除命名空間using namespace std;
並且將輸出cout<<換成printf()的形式即可~~
#include <iostream>
using namespace std;int binsearch(int *a,int x,int left,int right);
void main()
{
int arr[]={2,4,6,8,10,12,14,16,18,20};
int result;
int num;
num=18;
result=binsearch(arr,num,0,9);
if(result<0)
cout<<"沒有找到要找的數"<<endl;
else
cout<<"在arr["<<result<<"]中找到"<<num<<endl;
}
int binsearch(int *a,int x,int left,int right)//要動態改變的量放在遞歸函數的輸入裏面(在二分查找算法裏,上下標(就是這裏的left,right)需要動態改變)
{
int mid;
if(left<=right)
{
mid=(left+right)/2;
if(x==a[mid])
return mid;
else if(x<a[mid])
{
right=mid-1;
}
else if(x>a[mid])
{
left=mid+1;
}
return binsearch(a,x,left,right);//調用自身
}
return -1;
}