首页 > 其他分享 >【408考点之数据结构】顺序查找和折半查找

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

时间:2024-07-01 10:58:37浏览次数:14  
标签:折半 arr return int 查找 key 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))。
  • 适用于大规模有序数据集。

缺点

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

比较与应用场景

顺序查找适用于:

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

折半查找适用于:

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

标签:折半,arr,return,int,查找,key,408
From: https://blog.csdn.net/gygkhd/article/details/140095095

相关文章

  • Leetcode 力扣 125. 验证回文串 (抖音号:708231408)
    如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。字母和数字都属于字母数字字符。给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。示例1:输入:s="Aman,aplan,......
  • Leetcode 力扣 128. 最长连续序列 (抖音号:708231408)
    给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n) 的算法解决此问题。示例1:输入:nums=[100,4,200,1,3,2]输出:4解释:最长数字连续序列是[1,2,3,4]。它的长度为4。示例2:输入:nums=......
  • SQL查找最晚入职员工的所有信息
    系列文章目录文章目录系列文章目录前言前言前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。入职最晚的员工信息(不一定只有一条)select*fromemployeesord......
  • 【秋招刷题打卡】Day02-二分系列之-二分查找
    Day02-二分系列之-二分查找前言给大家推荐一下咱们的陪伴打卡小屋知识星球啦,详细介绍=>笔试刷题陪伴小屋-打卡赢价值丰厚奖励<=⏰小屋将在每日上午发放打卡题目,包括:一道该算法的模版题(主要以力扣,牛客,acwing等其他OJ网站的题目作为模版)一道该算法的应用题(主要以往......
  • 速通数学建模 —— 查找数据
    目录百度搜索技巧完全匹配搜索:查询词的外边加上双引号“”标题必含关键词:查询词前加上intitle:搜索文档:空格再输入filetype:文件格式去掉不想要的:查询词后面加空格后加减号与关键字 知网查文献先看知网的硕博士论文高级检索:想了解神经网络在信贷策略中的应用,想找一些......
  • 二分查找
    二分查找算法思想有序的序列,每次都是以序列的中间位置的数来与待查找的关键字进行比较,每次缩小一半的查找范围,直到匹配成功。一个情景:将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于......
  • 计算机网络:408考研|重要拓展内容|冷门考点|英文缩写词(完结撒花~)
    系列目录408计算机网络总纲领更新日志6.15物理层的接口特性,修改了部分排版问题6.17数据链路层的拥塞控制,补充部分额外英文缩写词6.21考纲中明确提到的物理层的信源与信宿;数据链路层的ALOHA协议和令牌传递协议;以及运输层的UDP校验目录系列目录更新日志拓展......
  • 704. 二分查找 27. 移除元素
    704.二分查找题目链接:https://leetcode.cn/problems/binary-search/ 前置条件:数值有序 效果:可以将时间复杂度优化为log(n) 思路:target(可能存在的)元素等于mid位元素时,返回当前下标target元素相对于mid位元素小时,选择左侧区域继续查找t......
  • 代码随想录Day1-二分查找法|快慢指针
    二分查找题目链接二分查找是一个较为基础的查找方式,对一个有序没有重复值的数组进行查找时,能够提供一个较好的时间复杂度\(O(log(n))\)算法概要对于有序并且没有重复值的数组来说,我们可以首先选定整个数组的中间下标,它的值则称为中间值,通过它把大数组分成两个小的数组,其中一个......
  • Maven 官网 查找&下载 jar包 & pom引用
    问题描述在我们在开发过程中,经常遇到程序中需要引用的某个版本jar包,但是在公司的私有仓库下载不到的情况。遇到这种情况,该怎么办呢?很多人应该首选百度搜索吧。(当然可以,但是,不一定能很快找到自己想要的某个版本的jar包)这里给出一个简洁,方便查找的方案。 完美方案在Maven......