zoukankan      html  css  js  c++  java
  • 对半搜索递归实现 C++

    把文字粘贴过来发现下标会乱掉,就存图了。


    对半查找递归实现函数:

    int Bsearch(int& x, int left, int right){
        if(left <= right){    			//若表(子表)非空 
            int m = (left + right)/2;   //对半分割 
            if(x == arr[m]) return m;   //搜索成功 
            else if(x < arr[m])
                return Bsearch(x, left, m-1);  //搜索左半子表 
            else 
                return Bsearch(x, m+1, right); //搜索右半子表 
        }
        return -1; //表示没查找到 
    }

    注意对半搜索要求数组有序,测试代码:

    #include <iostream>
    #include <algorithm>
    using namespace std;
    int arr[6];
    int Bsearch(int& x, int left, int right){
        if(left <= right){    			//若表(子表)非空 
            int m = (left + right)/2;   //对半分割 
            if(x == arr[m]) return m;   //搜索成功 
            else if(x < arr[m])
                return Bsearch(x, left, m-1);  //搜索左半子表 
            else 
                return Bsearch(x, m+1, right); //搜索右半子表 
        }
        return -1; //表示没查找到 
    }
    //测试 
    int main(){
        arr[0] = 1;
        arr[1] = 2;
        arr[2] = 3;
        arr[3] = 6;
    	arr[4] = 10;
    	arr[5] = 8;
    	sort(arr, arr+6);   //对半查找要求数组有序 
        int sea;
        cout << "输入查找元素:"; 
        cin >> sea;
        if(Bsearch(sea, 0, 5) >= 0){
            cout << "该元素对应的下表是:" << Bsearch(sea, 0, 5) << endl;
            }
        else{
            cout << "数组中不存在该元素" << endl;
        }
        return 0;
    }


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    BZOJ2243: [SDOI2011]染色
    BZOJ3747: [POI2015]Kinoman
    BZOJ1293: [SCOI2009]生日礼物
    BZOJ3626 [LNOI2014]LCA
    BZOJ3514 Codechef MARCH14 GERALD07加强版
    BZOJ3295 [CQOI2011]动态逆序对
    BZOJ2588 [SPOJ10628]Count on a tree
    BZOJ1036 [ZJOI2008]树的统计Count
    CODEVS1490 [CTSC2008]网络管理
    BZOJ1070 [SCOI2007]修车
  • 原文地址:https://www.cnblogs.com/Tobyuyu/p/4965261.html
Copyright © 2011-2022 走看看