查找

查找

1.顺序查找验证程序

描述

定义一个整型数组r,用于存储关键码集合,其中r[1]~r[n]用于存储有效的关键码,r[0]留作它用。按照哨兵设置在下标为0处的从后向前顺序查找方法,查找在关键码集合中是否有符合给定值的记录,如果有,返回该记录所在数组的下标,如果没有,返回0。要求输出查找过程,即查找过程中需要比较的关键码值都输出。(数组的长度小于<100),

输入描述

各个命令以及相关数据的输入格式如下: 第一行输入关键码集合中关键码的数目,假设输入的值为n(n为大于0的正整数) ; 第二行输入n个关键码,以空格隔开,注意是整型; 接下来三行输入三个待查值.

输出描述

对于每个待查值,分别输出两行,第一行输出查找待查值的比较过程,即输出找到之前与待查值相比较的所有的关键码值; 第二行如果找到待查值,输出位置下标,如果没找到,输出0; 注意,每个待查值占两行,三个待查值占六行.

输入样例

10

2 5 6 9 8 11 17 58 3 44

5

17

4

需要注意的其实就是是从末尾来遍历的

#include<iostream>
#include<string.h>
using namespace std;
/*
param: r是进行对比的数组
param: n是查找次数
param: k是待查值
*/
int seqsearch1(int r[], int n, int k)
{
   
	//ToDo 查找待查值 并且将比较过程输出
	for (size_t i = n; i > 0; i--)
	{
   
		if (k != r[i]) {
   
			cout << r[i] << " ";
		}
		else {
   
			return i;
		}
	}
	return 0;
}

int main()
{
   
	//ToDo 设计主函数以满足题意
	int n = 0;
	cin >> n;
	int* arr = new int[n + 1];
	memset(arr, 0, sizeof(int) * (n + 1));
	for (size_t i = 1; i < (n+1); i++)
	{
   
		cin >> arr[i];
	}
	int search[3] = {
    0 };
	for (size_t i = 0; i < 3; i++)
	{
   
		cin >> search[i];
	}
	for (size_t i = 0; i < 3; i++)
	{
   
		cout << endl << seqsearch1(arr, n, search[i]) << endl;
	}
	delete[] arr;
	return 0;
}

2.查找最大值和最小值

描述

输入关键码的个数n和n个整型关键码,求序列中的最小值和最大值,空格隔开。

输入描述

输入关键码个数n 输入n个整型关键码,以空格隔开

输出描述

输出最小值和最大值,以空格隔开,然后回车。

输入样例

10

1 3 5 7 9 2 4 6 8 10

输出样例

1 10

#include<iostream>
#include<string.h>
using namespace std;

int main()
{
   
	int length = 0;
	cin >> length;
	int* arr = new int[length];
	memset(arr, 0, sizeof(int) * (length));
	for (size_t i = 0; i < length; i++)
	{
   
		cin >> arr[i];
	}
	int max = arr[0];
	int min = arr[0];
	for (size_t i = 0; i < length; i++)
	{
   
		if (max<arr[i])
		{
   
			max = arr[i];
		}
		if (min > arr[i]) {
   
			min = arr[i];
		}
	}
	cout << min << " " << max;
	delete[] arr;
	return 0;
}

3.按范围查找元素

描述

关键码类型为整型,按任意顺序输入若干个关键码组成待查找集合,输入查找范围,并正序输出符合该范围的所有关键码,可以有重复数据。

输入描述

第一行输入关键码的个数n 第二行输入n个关键码 第三行输入s和t,s表示要查找关键码的最小值,t是要查找关键码的最大值

输出描述

按正序输出符合查找范围所有关键码,以空格隔开,最后一个空格不处理。

输入样例

10

5 9 7 4 1 3 2 4 6 8

1 6

输出样例

1 2 3 4 4 5 6

可以看到这里需要排序的,至于排序的事情,我就交给C++ sort()排序函数

#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;

int main()
{
   
	int length = 0;
	cin >> length;
	int* arr = new int[length];
	memset(arr, 0, sizeof(int) * (length));
	for (size_t i = 0; i 
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值