码迷,mamicode.com
首页 > 其他好文 > 详细

二分法的五种实现

时间:2015-07-17 18:34:16      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

while的实现

#include<iostream>
using namespace std;
void whilee1(int *a,int shang,int xia,int num)//
{
    cout << "shang\tzhong\txia\t " << endl;
    while (shang >=xia)//如果把序号大的看作上面用shang > xia,序号小的看作上面用xia<shang
    {
        int zhong = (shang + xia) / 2;
        cout << shang << "\t" << zhong << "\t" << 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\tzhong\txia\t " << endl;
    while (shang<=xia)//如果把序号大的看作上面用shang >= xia,序号小的看作上面用xia<shang
    {
        int zhong = (shang + xia) / 2;
        cout << shang << "\t" << zhong << "\t" << 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\tzhong\txia\t " << endl;
	do
	{
		zhong = (shang + xia) / 2;
		cout << shang<<"\t"<<zhong<<"\t"<<xia<<"\t " << 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\tzhong\txia\t " << endl;
	do
	{
		zhong = (shang + xia) / 2;
		cout << shang << "\t" << zhong << "\t" << xia << "\t " << 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\tzhong\txia\t" << endl;
	for (zhong = (shang + xia) / 2; shang >= xia;zhong=(shang+xia)/2)
	{
		cout << shang<<"\t"<<zhong<<"\t"<<xia<<"\t" << 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\tzhong\txia\t" << endl;
	A: int zhong = (shang + xia) / 2;
		cout << shang << "\t" << zhong << "\t" << xia << "\t" << 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 << "\t" << zhong << "\t" << 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;
	}
}

  

 

二分法的五种实现

标签:

原文地址:http://www.cnblogs.com/bkcarlos/p/4654991.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!