【设计和算法分析】3、二进制搜索

/**
* 书:《设计和算法分析》
* 特征:二进制搜索
*		1、建立a[0:n-1]是一排的阵列已经好序。请重写二进制搜索算法,因此,搜索元素时x不用时,该阵列。返回小于x最大的元素
*		S档I而超过x最小的元素位置j。在数组中的时候。I和j同样,均为x在数组中的位置
* 文件:lesson3.cpp
* 时间:2014年11月4日19:50:20
* 作者:cutter_point
*/

#include <iostream>

using namespace std;

//这里a是用来搜索的序列,n是序列里面数据的个数,x是要找的数,i和j是用来找位置的
bool erFen(int *a, int n, int x, int& i, int& j)	//i和j是两个引用
{
	int left = 0;	//查找的起始点
	int right = n - 1;	//查找的终点
	while (left < right)	//仅仅要还有数据没有被遍历,那就一直循环一直到找到,或者没有
	{
		int mid = (left + right) / 2;	//二分法的精髓,一分为二
		if (x == a[mid])	//从中间開始比較
		{
			i = j = mid;	//假设正好是中间的那个数的话,把位置赋值给i,j
			cout << "位置是:" << mid+1<<endl;
			return true;
		}
		//假设不是中间那个地方的话
		if (x > a[mid])	//因为是已经排好序了
		{
			//得到当前小于x的元素的位置
			j = mid;
			left = mid + 1;	//把后半部分作为新的起点
		}
		else
		{
			//得到当前大于x的元素位置
			i = mid;
			right = mid - 1;	//把前半部分作为新的数列
		}
	}

	//假设没有找到
	//i = right;
	//j = left;
	cout << "位置是:" << j+1 << " 和 " << i+1 << "之间" << endl;
	return false;
}

int main()
{
	int n, x, i=0, j=0;
	n = 0;
	cout << "依次输入数列的长度n,要找的整数x(中间用空格隔开)" << endl;
	cin >> n >> x;
	int *a;
	a = new int[n];
	cout << "输入数组数据:" << endl;
	for (int i = 0; i < n; ++i)
	{
		cin >> a[i];
	}

	erFen(a, n, x, i, j);	//i和j有两个引用

	getchar();
	return 0;
}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值