数据结构-怀化学院期末题(489)

题目描述:

实现折半查找。要求查找给定的值在数据表中相应的存储位置。本题目假定输入元素均按非降序输入。

输入:

输入包含若干个测试用例,第一行为测试用例个数k。每个测试用例占3行,其中第一行为元素个数n,第二行为n个元素值,即数据表中的元素,第三行为需要查找的元素。

输出:

对每一测试用例,分别用一行输出两个值,分别表示相应的位置和查找次数,用空格隔开。如果查找不成功,则位置表0表示。

输入样例:

1

5

1 2 4 7 9

4

输出样例:

3 1

代码:

cpp 复制代码
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<string.h>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<stack>
#include<map>
using namespace std;
typedef pair<int,int> PII;
const int N = 1e5 + 10;

int main(){
	int k;
	cin >> k;
	while(k --){
		int n;
		cin >> n;
		int a[1024];
		for(int i = 1;i <= n;i ++){
			cin >> a[i];
		}
		int num;
		cin >> num;
		int sum = 0;
		int l = 1,r  = n;
		while(l < r){
			int mid = l + r + 1  >> 1;
			if(a[mid] > num) r = mid - 1 ;
			else l = mid;
			sum ++;
		}
		cout << r << ' ' << sum-1 << endl;
	}
	return 0;
}

板子:

cpp 复制代码
 
// 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用:
int bsearch_1(int l, int r)
{
    while (l < r)
    {
        int mid = l + r >> 1;
        if (check(mid)) r = mid;    // check()判断mid是否满足性质
        else l = mid + 1;
    }
    return l;
}
 
// 区间[l, r]被划分成[l, mid - 1]和[mid, r]时使用:
int bsearch_2(int l, int r)
{
    while (l < r)
    {
        int mid = l + r + 1 >> 1;
        if (check(mid)) l = mid;
        else r = mid - 1;
    }
    return l;
}
相关推荐
J2虾虾17 分钟前
C 语言 sizeof 完全用法指南
c语言·数据结构·算法
一切皆是因缘际会32 分钟前
因果推理人工智能
大数据·数据结构·人工智能
洛水水1 小时前
【力扣100题】78.在排序数组中查找元素的第一个和最后一个位置
数据结构·算法·leetcode
meilindehuzi_a1 小时前
深入理解JavaScript线性数据结构:从内存视角探究数组、链表、栈与队列
javascript·数据结构·链表
m0_547486661 小时前
华南农业大学《数据结构》期末试卷及答案2011-2019 2020-2023年PDF
大数据·数据结构·pdf·华南农业大学
想要成为糕糕手15 小时前
前端必修课:JavaScript 数组与数据结构底层逻辑全解析
javascript·数据结构·面试
tyung17 小时前
Go 手写 Wait-Free SPSC 无界队列:无 CAS、无锁、泛型节点池
数据结构·后端·go
Chen_harmony18 小时前
一、数据结构概念和复杂度计算
数据结构
小欣加油18 小时前
leetcode287寻找重复数
数据结构·c++·算法·leetcode
fie888920 小时前
LBP + HOG 特征检测与识别 MATLAB 实现
数据结构·算法·matlab