分治法之二分查找

二分查找算法適用於在已經排好序的數組或者二叉樹中,由於比較簡單,故直接上代碼。

代碼如下:


//遞歸實現
int binarySearch_recursion(const int arr[], const int left, const int right, const int key)
{
    if(left > right)
        return -1;
    else
    {
        int mid = left + (right-left)/2;
        if(arr[mid] == key)
            return mid;
        else if(arr[mid] > key)
            return binarySearch_recursion(arr, left, mid-1, key);
        else
            return binarySearch_recursion(arr, mid+1, right, key);
    }
}
int binarySearch_recursion(const int arr[], const int size, const int key)
{
    return binarySearch_recursion(arr, 0, size-1, key);
}



//非遞歸實現
int binarySearch_norecursion(const int arr[], const int size, const int key)
{
    int left = 0;
    int right = size - 1;
    int mid = -1;

    while(left <= right)
    {
        mid = left + (right-left)/2;
        if(key == arr[mid])
            return mid;
        else if(key < arr[mid])
            right = mid - 1;
        else
            left = mid + 1;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章