C++

折半查找 题目编号:518

定义一个整型数组r,用于存储关键码集合,其中r[1]~r[n]用于存储有效的关键码,r[0]留作它用,注意该数组按关键码有序。按照折半查找方法,查找在关键码集合中是否有符合给定值的记录,如果有,返回该记录所在数组下标,如果没有,返回0。要求输出查找过程,即输出每一轮的low,mid,high值,查找过程中需要比较的关键码值都输出。(数组的长度小于<100)

输入描述
各个命令以及相关数据的输入格式如下:
第一行输入关键码集合中关键码的数目,假设输入的值为n;
第二行输入n个关键码,以空格隔开,注意是整型;
接下来三行输入三个待查值.
输出描述
对于每个待查值,先输出查找待查值的比较过程,即输出找到之前每一轮low,mid,high值,以空格隔开,及与待查值相比较的所有的关键码值,每一轮占一行;
接下来如果找到待查值,输出位置下标,如果没找到,输出0.
输入样例
10
2 3 5 6 8 9 11 17 44 58
5
17
4
输出样例
1 5 10 8
1 2 4 3
3 3 4 5
3
1 5 10 8
6 8 10 17
8
1 5 10 8
1 2 4 3
3 3 4 5
0

#include<iostream>
using namespace std;
int binsearch(int a[],int n,int k)
{
	int low,high,mid;
	low=1,high=n-1;	 	
	while(low<=high)
	{ 
		mid=(low+high)/2;	
		cout<<low<<" "<<mid<<" "<<high<<" "<<a[mid]<<endl;
		if(k<a[mid]) high=mid-1;
		else if(k>a[mid]) low=mid+1;
		     else return mid;
	
	}
		return 0;

 } 
 int main()
 {
 	int n,i,a[100];//n为个数 i为循环次数 a[] 指定的数组
 	cin>>n;
 	for(i=1;i<n+1;i++)
 	{
 		cin>>a[i];
	 }
	 int c1,c2,c3;//查找的三个数 
	 int b1,b2,b3;//被查找的数的下标下标 
	cin>>c1; 
	cin>>c2;
	cin>>c3;  
	b1=binsearch(a,i,c1);
	cout<<b1;
	b2=binsearch(a,i,c2);
	cout<<b2;
	b3=binsearch(a,i,c3);
	cout<<b3;
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
题目描述: 定义一个整型数组r,用于存储关键码集合,其中r[1]~r[n]用于存储有效关键码,r[0]留作它用,注意该数组关键码有序。按照折半查找方法,查找在关键码集合中是否有符合给定值的记录,如果有,返回该记录所在数组下标,如果没有,返回0。要求输出查找过程,即输出每一轮的low,mid,high值,查找过程中需要比较的关键码值都输出。(数组的长度小于<100) -------------------------------------------------------------------------------- 输入样例: 10 2 3 5 6 8 9 11 17 44 58 5 17 4 -------------------------------------------------------------------------------- 输出样例: 1 5 10 8 1 2 4 3 3 3 4 5 3 1 5 10 8 6 8 10 17 8 1 5 10 8 1 2 4 3 3 3 4 5 0 -------------------------------------------------------------------------------- 输入描述: 各个命令以及相数据的输入格式如下: 第一行输入关键码集合关键码的数目,假设输入的值为n; 第二行输入n个关键码,以空格隔开,注意是整型; 接下来三行输入三个待查值. -------------------------------------------------------------------------------- 输出描述: 对于每个待查值,先输出查找待查值的比较过程,即输出找到之前每一轮low,mid,high值,以空格隔开,及与待查值相比较的所有的关键码值,每一轮占一行; 接下来如果找到待查值,输出位置下标,如果没找到,输出0.

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值