雖然我試圖在二進制搜索遞歸函數中修改很少的代碼。該計劃表現怪異。有一段時間它會給出正確的值,並且有一段時間會進入無限循環。請解釋代碼出了什麼問題。我正在使用DEV C++作爲IDE。二進制搜索很少修改
CODE:
#include<iostream>
#include<sstream>
using namespace std;
//function to compare the two integers
int compare(int low, int high)
{
if (low==high)
return 0;
if (low<high)
return 1;
else
return -1;
}
//Function for binary search using recursion
int *BinarySearch(int *Arr,int Val,int start,int end)
{
int localstart=start;
int localend=end;
int mid=(start+end)/3;
cout<<"MID:"<<mid;
int comp= compare(Val,Arr[mid]);
if(comp==0)
return &(Arr[mid]);
else if (comp>0)
return BinarySearch(Arr,Val,localstart,mid-1);
else
return BinarySearch(Arr,Val,mid+1,localend);
return NULL;
}
main()
{
int *arr;
arr= new int [256];
string str;
getline(cin,str);
stringstream ss;
ss<<str;
int index=0;
while(ss>>arr[index])
{index++;}
//cout<<arr[index-1];
cout<<"Enter Value:";
int value;
cin>>value;
int *final;
final=BinarySearch(arr,value,0,index-1);
if(final!=NULL)
cout<<"Final:"<<*final;
else
cout<<"Not Found";
getchar();
getchar();
return 0;
}
您在調試程序時發現了什麼? –
缺乏縮進有點難以閱讀。 – Jamal
「有一段時間它給出了正確的值,有一段時間它進入了無限循環」......兩種情況下的輸入值是什麼? – surender8388