二分搜索遞歸與非遞歸C語言實現

據說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;
    }
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章