【408考点之数据结构】顺序查找和折半查找

顺序查找和折半查找

在数据处理中,查找操作是非常重要的一部分。顺序查找和折半查找是两种常见的查找方法,它们各有优缺点和适用场景。以下是对这两种查找方法的详细介绍。

1. 顺序查找

定义:顺序查找(Sequential Search),也称线性查找,是一种最简单、最直接的查找方法。它从数据集的第一个元素开始,逐个检查每个元素,直到找到目标元素或检查完整个数据集。

算法实现

#include <stdio.h>int SequentialSearch(int arr[], int n, int key) {for (int i = 0; i < n; i++) {if (arr[i] == key) {return i; // 返回元素下标}}return -1; // 查找失败
}int main() {int arr[] = {1, 3, 5, 7, 9, 11};int n = sizeof(arr) / sizeof(arr[0]);int key = 7;int result = SequentialSearch(arr, n, key);if (result != -1) {printf("元素 %d 的下标是: %d\n", key, result);} else {printf("元素 %d 未找到\n", key);}return 0;
}

优点

  • 简单易实现。
  • 不要求数据集有序。
  • 适用于小规模数据集。

缺点

  • 查找效率低,时间复杂度为 (O(n))。
  • 随着数据集规模的增加,查找时间显著增加。
2. 折半查找

定义:折半查找(Binary Search),也称二分查找,是一种效率较高的查找方法。它适用于有序数据集,通过逐步缩小查找范围,快速找到目标元素。

算法实现

#include <stdio.h>int BinarySearch(int arr[], int low, int high, int key) {while (low <= high) {int mid = low + (high - low) / 2;if (arr[mid] == key) {return mid; // 返回元素下标}if (arr[mid] < key) {low = mid + 1;} else {high = mid - 1;}}return -1; // 查找失败
}int main() {int arr[] = {1, 3, 5, 7, 9, 11};int n = sizeof(arr) / sizeof(arr[0]);int key = 7;int result = BinarySearch(arr, 0, n - 1, key);if (result != -1) {printf("元素 %d 的下标是: %d\n", key, result);} else {printf("元素 %d 未找到\n", key);}return 0;
}

优点

  • 查找效率高,时间复杂度为 (O(\log n))。
  • 适用于大规模有序数据集。

缺点

  • 需要数据集有序。
  • 对数据集的插入和删除操作不友好,维护有序性成本较高。

比较与应用场景

顺序查找适用于:

  • 数据集规模较小。
  • 数据集无序或动态变化频繁,难以维持有序状态。
  • 查找操作较少,更多的是插入和删除操作。

折半查找适用于:

  • 数据集规模较大。
  • 数据集有序,或可以在查找前进行一次性排序。
  • 查找操作频繁,插入和删除操作相对较少。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/38547.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前沿重器[52] | 聊聊搜索系统5:召回:检索、粗排、多路召回

前沿重器 栏目主要给大家分享各种大厂、顶会的论文和分享&#xff0c;从中抽取关键精华的部分和大家分享&#xff0c;和大家一起把握前沿技术。具体介绍&#xff1a;仓颉专项&#xff1a;飞机大炮我都会&#xff0c;利器心法我还有。&#xff08;算起来&#xff0c;专项启动已经…

大数据的魔方:Kylin Cube构建全解析

&#x1f4d8; 大数据的魔方&#xff1a;Kylin Cube构建全解析 在大数据的浩瀚海洋中&#xff0c;Apache Kylin以其卓越的分析能力&#xff0c;为企业提供了一个强大的数据立方体&#xff08;Cube&#xff09;解决方案。Cube作为Kylin的核心概念之一&#xff0c;它的构建过程直…

C++Primer Plus 第十四章代码重用:总结

CPrimer Plus 第十四章代码重用&#xff1a;总结 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;CPrimer Plus 第十四章代码重用&#xff1a;总结 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff…

怎么把别人git项目保存为自己的

怎么把别人git项目保存为自己的 1.操作笔记1.1 先在自己的Git仓库里,把别人的项目克隆到本地。然后打开Git Bash或者其他的终端工具,然后使用以下命令克隆项目:1.2. 进入到本地仓库中,修改远程仓库的地址,将其指向自己的Git仓库。进入到项目的目录中,然后执行以下命令:1…

Windows定时任务执行脚本

场景&#xff1a;由于网络波动原因导致云数据库没连接上&#xff0c;从而导致某个流程引擎链接不上数据库从而导致该流程引擎服务挂了&#xff0c;网络恢复后 数据库链接正常&#xff0c;但是该引擎服务还是中止状态。 解决方案&#xff1a;在Windows中新建一个定时任务&#…

为用户转出并处理MODIS NDVI数据案例过程记述,希望对大家有用!

最近为用户转出和处理了一次MODIS NDVI数据&#xff0c;我将过程做了个总结供大家参考&#xff01;希望能帮助到一些下载和处理数据的朋友! 使用工具为三个&#xff1a;地图资源工具 和 GIS数据转换器-栅格&#xff0c;qgis。 1.选择【数据下载功能】&#xff0c;然后选择MO…

狄克斯特拉算法

狄克斯特拉算法&#xff08;Dijkstra’s algorithm&#xff09;是一种用于在带权图中找到从单一源点到所有其他顶点的最短路径的算法。它适用于处理带有非负权值的图。 下面将详细解释算法的工作原理、时间复杂度以及如何通过优化数据结构来改进其性能。 狄克斯特拉算法的工作…

复制 pdf 的表格到 markdown 版本的Typora 或者 word 中

在 pdf 中选中复制表格内容&#xff0c;直接粘贴到 typora 中失败&#xff0c;可以使用 txt文件和 excel 做过渡。 准备一个空的 txt 文件&#xff0c;将 pdf 中表格的数据复制粘贴到txt文件中&#xff0c;文本内容会以空格分开&#xff0c;如下图的形式&#xff1a; 打开 exc…

Android Gradle 开发与应用-Gradle基础

Gradle 是一个基于 Groovy 和 Kotlin DSL&#xff08;领域特定语言&#xff09;的构建自动化工具&#xff0c;特别适合用于大型项目的自动化构建。它广泛用于 Android 开发&#xff0c;因为它的灵活性和强大的依赖管理能力。下面是 Gradle 的基础介绍&#xff0c;特别是针对 An…

firewalld防火墙转发流量到其他端口forward port rules

假设云主机eth0: 47.93.27.106 tun0: inet 10.8.0.1 netmask 255.255.255.0 Show rules for a specific zone (public) sudo firewall-cmd --zonepublic --list-all Add the tun0 interface to the public zone: sudo firewall-cmd --zonepublic --add-interfacetun0 --…

手把手教你考下39张免费亚马逊AWS证书和学习徽章

小李哥目前共考了39项亚马逊云(AWS)徽章&#xff0c;这也是普通用户可考的全部徽章。这篇文章会介绍如何报名、复习、通过这39张徽章提升云计算基本技能&#xff0c;了解全球第一大云厂亚马逊云科技前沿技术。这篇文章在领英爆&#x1f525;&#xff0c;有将近100k浏览量和11k的…

MeterSphere v3.0全新启航,让软件测试工作更简单、更高效

2024年7月1日&#xff0c;MeterSphere v3.0版本正式发布。MeterSphere v3.0是新一代的测试管理和接口测试工具&#xff0c;致力于让软件测试工作更简单、更高效&#xff0c;不再成为持续交付的瓶颈。 在团队协作方面&#xff0c;针对目前企业软件测试团队所面临的测试工具不统…

Java中使用KMP算法解决力扣459.重复的子字符串问题

在解决字符串相关问题时&#xff0c;KMP&#xff08;Knuth-Morris-Pratt&#xff09;算法是一个非常有用的工具。今天&#xff0c;我们将使用KMP算法来解决力扣&#xff08;LeetCode&#xff09;上的一个经典问题&#xff1a;459. 重复的子字符串。 力扣459.重复的子字符串 题…

终止线程的典型方式

终止线程一般不使用JDK提供的 stop()/destory() 方法它们本身也被JDK废弃了。通常的做法是提供一个boolean型的终止变量&#xff0c;当这个变量置为false&#xff0c;则终止线程的运行。 public class stopThread implements Runnable {private boolean flag true;Overridepu…

数据安全与隐私保护在返利App中的实施策略

数据安全与隐私保护在返利App中的实施策略 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 一、引言 随着移动互联网的发展&#xff0c;返利App作为一种流行的…

深度学习项目GPU开发环境安装

注安装环境&#xff1a;ubuntu22.04, cuda 11.7, cudnn8.9 1.安装nvidia驱动 看可安装的Nvidia驱动版本&#xff1a;执行 ubuntu-drivers devices 安装合适版本的Nvidia驱动&#xff1a; sudo apt-get install nvidia-driver-515 注意&#xff1a;合适的版本需要尝试&#x…

5.12 Firmware Image Download command

5.12 Firmware Image Download command Firmware Image Download命令用于下载全部或部分image&#xff0c;以便将来更新控制器。当Admin Submission Queue 或 I/O Submission Queues 上的其他命令未完成时&#xff0c;可能会提交Firmware Image Download命令。Firmware Image …

从0开始建SMARTFORMS表格

一、简介步骤 1、设置纸张的大小&#xff08;页格式&#xff09; 2、设置字体大小&#xff08;样式&#xff09; 3、设置表格模板 二、详细操作步骤 1、设置页格式 事务码&#xff1a;SPAD 参考操作&#xff1a;SAP Smartforms页格式创建与使用_sap 页格式-CSDN博客 SA…

websocket (@ServerEndpoint)基本使用指南

概述 websocket 介绍 WebSocket 是一种通信协议&#xff0c;通过单个 TCP 连接提供全双工通信通道。它允许客户端和服务器之间进行双向通信、实时交互&#xff0c;比如在线聊天、实时数据展示等。 与传统的 HTTP 协议不同&#xff0c;WebSocket 连接是持久的&#xff0c;可以在…

godis源码分析——TCP服务

前言 Godis 是一个用 Go 语言实现的 Redis 服务器。 地址&#xff1a;https://github.com/HDT3213/godis?tabreadme-ov-file 简单架构描述 godis是一个中心服务&#xff0c;是TCP服务。流程大概是&#xff1a;godis开启服务&#xff0c;客户端通过TCP建立连接。客户端发起…