1. 程式人生 > >二分查詢模板總結(遞迴與迴圈遍歷兩個版本)

二分查詢模板總結(遞迴與迴圈遍歷兩個版本)

二分查詢:

思路:
有序*陣列***a[]中查詢K

1,不斷分割 。

2 用中間值去比較。

====================嘗試比較下面兩種,得到遞迴函式的寫法=========

【遞迴版本】

int BinSerch2(int a[], int k ,int left ,int right){

    int mid = (left + right) / 2;//1.不斷分割
    if (left <= right)   //遞迴迴圈的條件以及出口
    {
        if (a[mid] == k)//遞迴的迴圈體 位於遞迴之前,所以從由外到裡操作
        {
            return mid;
        }
        else if (k < a[mid]) //遞迴的迴圈
        {
            BinSerch2(a, k, left, mid - 1);
        }
        else{//遞迴的迴圈
            BinSerch2(a, k, mid + 1, right);
        }
    }
    else{
        return -1;
    }       
}

【非遞迴版本】

迴圈函式體主要包括兩個部分

1、分割

2、3種查詢條件判斷

//二分查詢 在陣列a[]中查詢K 1,不斷分割  。2 用中間值去比較。


int BinSerch1(int a[] ,int k){

    int left = 0, right = 11;
    while (left <right ) //迴圈條件
    {
        int mid = (left + right) / 2;//1.不斷分割
        if (a[mid] == k)//找到了  查詢的三種情況
        {
            return mid;
        }
        else if ( k < a[mid]) //
        {
            right = mid - 1;
        }
        else{
            left = mid + 1;
        }

    }
    return -1;
}