zoukankan      html  css  js  c++  java
  • 二分法查找的循环实现与递归实现

    二分法查找,就是在一列按顺序排列的数中查找某个数,以下是C++循环实现与递归实现

    #include <iostream>
    
    using namespace std;
    int findit(int a[],int b);
    int main()
    {
        int a[100];
        int b;
        int c;
        for(int i=0;i<100;i++)
        {
            a[i]=i;
        }
        cin>>b;
        c = findit(a,b);
        cout << c << endl;
        return 0;
    }
    int findit(int a[],int b)
    {
        int begin = 0;
        int end = 99;
        int mid = 0;
        while(begin<=end)
        {
            mid = (begin+end)/2;
            if(a[mid]==b)
            {
                return mid;
            }
    
            else if(a[mid]>b)
                end = mid-1;
            else
                begin=mid+1;
        }
        return -1;
    }

    循环实现

    #include <iostream>
    
    using namespace std;
    int findit(int a[],int b);
    int findit2 (int a[],int b,int begin,int end);
    int main()
    {
        int a[100];
        int b;
        int c;
        for(int i=0;i<100;i++)
        {
            a[i]=i;
        }
        cin>>b;
        c=findit2(a,b,0,99);
        //c = findit(a,b);
        cout << c << endl;
        return 0;
    }
    
    int findit2 (int a[],int b,int begin,int end)
    {
        int mid =  (begin+end)/2;
        if(begin>end)
            return -1;
        else if(a[mid]==b)
            return mid;
        else if(a[mid]>b)
            findit2(a,b,begin,mid-1);
        else
            findit2(a,b,mid+1,end);
    }

    递归实现

    此处,递归实现要比循环实现耗时间,也更耗空间,计算机处理递归的能力相对较低。

  • 相关阅读:
    349. Intersection of Two Arrays
    346. Moving Average from Data Stream
    345. Reverse Vowels of a String
    344. Reverse String
    342. Power of Four
    POJ2823 Sliding Window
    《STL源码剖析》笔记
    [jobdu]扑克牌顺子
    [jobdu]第一个只出现一次的字符
    [jobdu]包含min函数的栈
  • 原文地址:https://www.cnblogs.com/shuhaoz/p/4411597.html
Copyright © 2011-2022 走看看