查找
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