1. 程式人生 > >C++中二分查詢(遞迴,非遞迴)

C++中二分查詢(遞迴,非遞迴)

二分查詢:二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好;其缺點是要求待查表為有序表,且插入刪除困難。
二分查詢要求:
1.必須採用順序儲存結構
2.必須按關鍵字大小有序排列。
1
這是我們二分查詢的步驟
假設表中元素是按升序排列,將表中間位置記錄mid與查詢關鍵字key比較,如果兩者相等,則查詢成功;否則利用中間位置mid將表分成前、後兩個子表,如果中間位置mid大於查詢關鍵字key,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。

下面我們看一下二分查詢的程式碼

非遞迴

int BinarySearch(int *arr, int n, int key, int left, int right)
{
    left = 0;
    right = n - 1;
    while (left <= right)
    {
    int mid = (left + (right-left))>>2;
    if (arr[mid] > key)
    {
        right = mid - 1;

    }
    else if (arr[mid] < key)
    {
        left = mid
+ 1; } else { return mid; } } return -1; }

遞迴

int BinarySearch(int *arr, int key, int left, int right) 
{
    if(right<left)
        return - 1;

    int mid = (left + (right-left))>>2;
    if(arr[mid]>key)
    {
        return BinarySearch(arr, left, mid
- 1, key); } else if(arr[mid]<key) { return BinarySearch(arr, mid + 1, right, key); } else { return mid; } return - 1; }