zoukankan      html  css  js  c++  java
  • 二分法的五种实现

    while的实现

    #include<iostream>
    using namespace std;
    void whilee1(int *a,int shang,int xia,int num)//
    {
        cout << "shang	zhong	xia	 " << endl;
        while (shang >=xia)//如果把序号大的看作上面用shang > xia,序号小的看作上面用xia<shang
        {
            int zhong = (shang + xia) / 2;
            cout << shang << "	" << zhong << "	" << xia << endl;
            if (num == a[zhong])
            {
                cout << "whilee1 find" << endl;
                break;
            }
            else if (a[zhong]<num)
            {
                xia = zhong + 1;
    
            }
            else  //(num<zhong)
            {
                shang = zhong - 1;
            }
    
        }
        if (xia >shang)
        {    
            cout << "while1 not find " << endl;
        }
    }
    void whilee2(int *a, int xia, int shang, int num)
    {
        cout << "shang	zhong	xia	 " << endl;
        while (shang<=xia)//如果把序号大的看作上面用shang >= xia,序号小的看作上面用xia<shang
        {
            int zhong = (shang + xia) / 2;
            cout << shang << "	" << zhong << "	" << xia << endl;
            if (num == a[zhong])
            {
                cout << "whilee2 find" << endl;
                break;
            }
            else if (a[zhong]<num)
            {
                shang = zhong + 1;
    
            }
            else  //(num<zhong)
            {
                xia = zhong - 1;
            }
    
        }
        if (shang>xia)
        {
            cout << "while2 not find " << endl;
        }
    
    }



    dowhile的实现
    #include<iostream>
    using namespace std;
    void dowhile1(int *a,int shang,int xia,int num)
    {
    	int zhong;
    	cout << "shang	zhong	xia	 " << endl;
    	do
    	{
    		zhong = (shang + xia) / 2;
    		cout << shang<<"	"<<zhong<<"	"<<xia<<"	 " << endl;
    		if (num == a[zhong])
    		{
    			cout << "dowhile1 find" << endl;
    			break;
    		}
    		else if (num > a[zhong])
    		{
    			xia = zhong + 1;
    		}
    		else {
    			shang = zhong - 1;
    		}
    	} while (shang >= xia);
    		if (xia >shang) {
    			cout << "dowhile1 not fid" << endl;
    		}
    }
    void dowhile2(int *a, int xia, int shang, int num)
    {
    	int zhong;
    	cout << "shang	zhong	xia	 " << endl;
    	do
    	{
    		zhong = (shang + xia) / 2;
    		cout << shang << "	" << zhong << "	" << xia << "	 " << endl;
    		if (num == a[zhong])
    		{
    			cout << "dowhile2 find" << endl;
    			break;
    		}
    		else if (num > a[zhong])
    		{
    			shang = zhong + 1;
    		}
    		else {
    			xia = zhong - 1;
    		}
    	} while (xia>=shang);
    	if (shang>xia) {
    		cout << "dowhile2 not fid" << endl;
    	}
    }
    

      for的实现

    #include<iostream>
    using namespace std;
    void forr(int *a, int shang, int xia, int num)
    {
    	int zhong;
    	cout << "shang	zhong	xia	" << endl;
    	for (zhong = (shang + xia) / 2; shang >= xia;zhong=(shang+xia)/2)
    	{
    		cout << shang<<"	"<<zhong<<"	"<<xia<<"	" << endl;
    		if (num==a[zhong])
    		{
    			cout << "for find" << endl;
    			break;
    		}
    		else if (num > a[zhong])
    		{
    			xia = zhong + 1;
    		}
    		else 
    		{
    			shang = zhong - 1;
    		}
    	}
    	if (xia > shang)
    	{
    		cout << "for not find" << endl;
    	}
    }
    

      goto的实现

    #include<iostream>
    using namespace std;
    void gotoo(int *a, int shang, int xia, int num)
    {
    	if (shang >= xia)
    	{
    		cout << "shang	zhong	xia	" << endl;
    	A: int zhong = (shang + xia) / 2;
    		cout << shang << "	" << zhong << "	" << xia << "	" << endl;
    		if (num == a[zhong])
    		{
    			cout << "goto find" << endl;
    		}
    		else if (num > a[zhong])
    		{
    			if (shang > xia)
    			{
    				xia = zhong + 1;
    				goto A;
    			}
    			goto B;
    		}
    		else //(num < a[zhong])
    		{
    			if (shang > xia)
    			{
    				shang = zhong - 1;
    				goto A;
    			}
    		}
    	}
    	 if(shang<xia)
    	{
    	B:cout << "goto not find" << endl;
    	}
    }
    

      递归的实现

    #include<iostream>
    using namespace std;
    void recurrence(int *a, int shang, int xia, int num)
    {
    	if (shang >=xia)
    	{
    		int zhong = (shang + xia) / 2;
    		cout << shang << "	" << zhong << "	" << xia << endl;
    		if (num == a[zhong])
    		{
    			cout << "recurrence find" << endl;
    		}
    		else if (num > a[zhong])
    		{
    
    			recurrence(a, shang, zhong + 1, num);
    		}
    		else {
    
    			recurrence(a, zhong - 1, xia, num);
    		}
    	}
    	else
    	{
    		cout << "recurrence not find" << endl;
    	}
    }
    

      

  • 相关阅读:
    PHP如何计算两个时间之间相差多少时分秒
    关于php如何连贯操作类方法(以数据库为例)
    php中递归创建目录
    John细说PHP的验证码
    PHP内部函数使用外部变量的方法
    php中call_user_func_array()的使用
    linux-Centos6.5中nginx1.63源码安装
    shopnc 商城源码阅读笔记-缓存技术
    PHP引用传值规范问题
    shopnc 商城源码阅读笔记--开篇概述
  • 原文地址:https://www.cnblogs.com/bkcarlos/p/4654991.html
Copyright © 2011-2022 走看看