当前位置: 首页 > news >正文

【数据结构——查找】二分查找(头歌实践教学平台习题)【合集】

目录😋

任务描述

相关知识

测试说明

我的通关代码:

测试结果:


任务描述

本关任务:实现二分查找的算法。

相关知识

为了完成本关任务,你需要掌握:1.根据键盘输入的一组有序数据建立顺序表,2.顺序表的输出,3.二分查找算法。

提示:二分查找算法中要依次输出每次查找的区间,及与k所比较的关键字,用空格分隔开。假设顺序表的关键字序列: 2 3 10 15 20 25 28 29 30 35 40,

如果要查找的关键字k=20,则函数输出如下,并返回值5.
第1次比较: 查找范围R[0...10],比较元素R[5]:25
第2次比较: 查找范围R[0...4],比较元素R[2]:10
第3次比较: 查找范围R[3...4],比较元素R[3]:15
第4次比较: 查找范围R[4...4],比较元素R[4]:20

如果要查找的关键字k=26,则函数要输出如下,并返回值0.
第1次比较: 查找范围R[0...10],比较元素R[5]:25
第2次比较: 查找范围R[6...10],比较元素R[8]:30
第3次比较: 查找范围R[6...7],比较元素R[6]:28

测试说明

平台会对你编写的代码进行测试:

测试输入示例:
1 2 3 4 5 6 7 8 9 10 
9
(说明:第一行是输入的一组原始关键字数据,第二行是要查找的关键字)

预期输出:

请输入一组数据 : 关键字序列:1 2 3 4 5 6 7 8 9 10
请输入要查找的关键字 :9
查找9的比较过程如下:
第1次比较:在[0,9]中比较元素R[4]:5
 第2次比较:在[5,9]中比较元素R[7]:8
 第3次比较:在[8,9]中比较元素R[8]:9
元素9的位置是9

开始你的任务吧,祝你成功!


我的通关代码:

#include <iostream>
#include <vector>
using namespace std;
// 定义查找元素的结构体类型,包含关键字和其他数据(这里暂未详细使用其他数据部分)
struct RecType {int key;// 可以按需添加其他数据成员及对应操作,此处简化只关注关键字key
};// 创建顺序表,将输入的关键字数据存入顺序表中
void CreateList(vector<RecType> &R, const vector<int> &keys) {for (size_t i = 0; i < keys.size(); ++i) {RecType temp;temp.key = keys[i];R.push_back(temp);}
}// 输出顺序表的函数,遍历顺序表并输出每个元素的关键字
void DispList(const vector<RecType> &R) {for (size_t i = 0; i < R.size(); ++i) {cout << R[i].key << " ";}cout << endl;
}// 二分查找算法实现,按照要求输出每次查找的区间及比较的关键字
int BinSearch(const vector<RecType> &R, int k) {int low = 0;int high = R.size() - 1;int count = 1;while (low <= high) {int mid = low + (high - low) / 2;cout << "  第" << count << "次比较:在[" << low << "," << high<< "]中比较元素R[" << mid << "]:" << R[mid].key << endl;if (R[mid].key == k) {return mid + 1; // 返回位置,这里的位置是从1开始计数,所以下标加1} else if (R[mid].key > k) {high = mid - 1;} else {low = mid + 1;}count++;}return 0; // 如果没找到,返回0表示元素不在表中
}int main() {vector<RecType> R;vector<int> keys;int n =10; // 根据测试示例,这里默认输入数据个数为10,也可以改成让用户输入个数cout << "请输入一组数据 :" << endl;for (int i = 0; i < n; ++i) {int num;cin >> num;keys.push_back(num);}CreateList(R, keys);cout << "关键字序列:";DispList(R);int k;cin >> k;cout << "请输入要查找的关键字 :" << k << endl;cout << "查找" << k << "的比较过程如下:" << endl;int result = BinSearch(R, k);if (result != 0) {cout << "元素" << k << "的位置是" << result << endl;} else {cout << "元素" << k << "不在表中" << endl;}return 0;
}

测试结果:


在这里插入图片描述

http://www.lryc.cn/news/501736.html

相关文章:

  • 简单网页制作提升用户体验和客户转化
  • 数据类型(使用与定义)
  • VMware:CentOS 7.* 连不上网络
  • 日志分析详解
  • 【JavaWeb后端学习笔记】Maven项目管理
  • Docker--Docker Container(容器) 之 操作实例
  • Android前端签到web迁移到rust的axum的过程-签到的重构
  • 用户认证系统登录界面
  • Redis从入门到进阶(总结)
  • 【D3.js in Action 3 精译_044】5.1 饼图和环形图的创建(四):数据标签的添加
  • Linux的基本功能和命令
  • 【Spark】Spark的两种核心Shuffle工作原理详解
  • TCP 的文化内涵
  • ASP.NET |日常开发中读写XML详解
  • Less和SCSS,哪个更好用?
  • 第一个C++程序--(蓝桥杯备考版)
  • NanoLog起步笔记-7-log解压过程初探
  • 【MySQL 进阶之路】基础语法及优化技巧
  • 微信小程序做电子签名功能
  • PR的选择与移动
  • Linux系统 —— 进程系列 - 进程状态 :僵尸与孤儿
  • linux/centOS7用户和权限管理笔记
  • 使用C#基于ADO.NET编写MySQL的程序
  • Scala函数的泛型
  • 云轴科技ZStack亮相中国生成式AI大会上海站 展现AI Infra新势力
  • 态感知与势感知
  • 汽车零部件设计之——发动机曲轴预应力模态分析仿真APP
  • 谷歌浏览器的网页数据导出与导入方法
  • pytroch环境安装-pycharm
  • 【大模型】PostgreSQL是向量数据库吗