折半查找

这篇博客介绍了一个使用C++实现的折半查找算法,该算法应用于有序整数数组中查找特定值。博客首先阐述了折半查找的基本原理,然后展示了类`Search`的实现,包括构造函数和`Bin`方法。`Bin`方法详细地输出了查找过程中的`low`、`mid`、`high`值以及与目标值的比较。接着,博客给出了输入样例和相应的输出样例,演示了算法在不同查找值下的工作情况。通过这个实例,读者可以深入理解折半查找算法的运作机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

定义一个整型数组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>
#define max 100
using namespace std;
class Search
{
	public:
		Search(int a[],int n);
		int Bin(int k);
	private:
		int data[max];
		int length; 
};
Search::Search(int a[],int n)//构造函数进行初始化 
{		
	for(int i=1;i<n+1;i++)
		data[i]=a[i];
		length=n;
 } 
 int Search::Bin(int k)//折半查找 
 {
 	int mid,low=1,high=length;//初始查找范围[1,n] 
 	while(low<=high)//
 	{
 		mid=(low+high)/2;
 		cout<<low<<" "<<mid<<" "<<high<<" "<<data[mid]<<endl;//依题意输出 
 		if(k<data[mid])
		 {
		 	high=mid-1;
		 }
 		else if(k>data[mid])
		 {
		 	low=mid+1;
		 }
 		else
		 {
 			return mid;//查找成功 ,返回元素下标序号 
		 }
 			
	 }
	 return 0;//查找失败 ,返回0。 
 }
 int main()
 {
 	int n,a[max],k[3];
 	cin>>n;
 	for(int i=1;i<n+1;i++)
	 cin>>a[i];
	 Search T(a,n);//初始化关键码 
	 for(int i=0;i<3;i++)//输入三次查找值 
	 {
	 	cin>>k[i];
	 }
	 for(int i=0;i<3;i++)//三次返回值的输出 
	{
		 cout<<T.Bin(k[i]);
		 cout<<endl;
	}	
	 return 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
发出的红包

打赏作者

阿垚啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值