二分查找法

do while版

#include <iostream>
using namespace std;
const int MAX = 12983;
int main()
{
    int n;
    cin >> n;
    int a[MAX];
    for (int i=0;i<MAX;++i)
        a[i] = i;
    int top=(0),end(MAX-1);
    do
    {
        int middle = (top+end)/2;
        cout << "现在的中间节点是:" << middle << endl;
        if(n>a[middle])
        {
         top = middle+1;
        }
        else if (n<a[middle])
        {
             end = middle-1;
        }
        else if (n == a[middle])
        {
             cout << "找到了:" << a[middle] << endl;
             break;
        }
    }while(top<end);
   
    system("pause");
}
for版

#include <iostream>
using namespace std;
const int MAX = 12983;
int main()
{
    int n;
    cin >> n;
    int a[MAX];
    for (int i=1;i<=MAX;++i)
        a[i] = i;
    int top = 1;
    int end = MAX;
    for (;top<end;)
    {
        int middle = (top+end)/2;
        cout << "现在的中间节点是:" << middle << endl;
        if (n<a[middle])
        {
         end = middle-1;
        }
        else if (n>a[middle])
        {
             top = middle+1;
        }
        else if(n==a[middle])
        {
             cout << "找到了:" << a[middle] << endl;
             break;
        }
    }
    system("pause");
}
goto 版

#include <iostream>
using namespace std;
const int MAX = 1023;
int main()
{
    int a[MAX];
    int n;
    cin >> n;
    for (int i=1;i<=MAX;++i)
        a[i] = i;
    int top(1),end(MAX);
    goo:
    int mid = (top+end)/2;
    cout << "中间节点变化:" << mid << endl;
    if (n>a[mid])
    {
     top = mid+1;
     goto goo;
    }
    else if(n<a[mid])
    {
         end = mid-1;
         goto goo;
    }
    else if (n==a[mid])
    {
         cout << "找到了:" << a[mid] << endl;
    }
    system("pause");
    return 0;
}
递归版

#include <iostream>
using namespace std;
const int MAX = 12983;
/*int recursive(const int a[],int n,int top,int end)
{   
    
}*/

/*template <typename T,size_t Size>
size_t sizeofArray(const T (&)[Size])
{
       return Size;
}*/


template <typename T, size_t Size>
void recursive(const T (&a)[Size],int top,int end,int n)//数组  顶部  底部 查找号码
{
    int mid = (top+end)/2;
    cout << "现在的中节点为:" << mid << endl;
    if (n>a[mid])
    {
     top = mid+1;
     recursive(a,top,end,n);
    }
    else if (n<a[mid])
    {
         end = mid-1;
     recursive(a,top,end,n);
    }
    else if (n==a[mid])
    {
     cout << "找到了:" << a[mid];
     return;
    }
        
   
};
int main()
{
    int n;
    cin >> n;
    int a[MAX];
    for (int i=1;i<=MAX;++i)
        a[i] = i;
    int top(1),end(MAX);
    recursive(a,top,end,n);
   
    //cout << sizeofArray(a);//数组  需要找的数字  top   max 
    system("pause");
}
while版

#include <iostream>
using namespace std;
const int MAX = 1024;
int main()
{
    int a[MAX];
    for (int i=1;i<=MAX;++i)
        a[i] = i;
    //cout << a;
    int shang = 1;
    int xia = MAX;
    int num = 0;
    while (shang<xia)
    {
          int zhong = (shang+xia)/2;
          cout << "zhong:" << zhong << endl;
          if(num<a[zhong])
          {
           xia = zhong-1;
           }
           else if(num>a[zhong])
           {
                shang = zhong+1;
           }
           else if(num==a[zhong])
           {
                cout << "找到了:" << a[zhong] << endl;
                break;
           }
     }
    system("pause");
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值