據說90%的程序員都無法正確的寫出二分搜索,試了下果然如此,需要注意的地方挺多,所以講遞歸與非遞歸的寫法記錄下來,以便於複習
int binary_search(int array[],int n,int key) //非遞歸
{
int low=0;
int high=n-1;
while(low<=high) //請注意=
{
if(array[low+(high-low)/2]==key)
{
return low+(high-low)/2; //請注意 low+
}
else if(array[low+(high-low)/2]>key)
{
high=low+(high-low)/2 -1; //請注意-1
}
else
{
low=low+(high-low)/2 +1 ; //請注意+1
}
}
return -1;
}
int binary_search(int array[],int low,int high,int key) //遞歸 ,需要參數 low high
{
if(low<=high)
{
if(key==array[low+(high-low)/2])
return (low+(high-low)/2);
else if(key>array[low+(high-low)/2])
return binary_search(array,low+(high-low)/2+1,high,key);
else
return binary_search(array,low,low+(high-low)/2-1,key);
}
else
{
return -1;
}
}