0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

常见的查找算法汇总(含详细代码)5

jf_78858299 来源:阿Q正砖 作者:阿Q正砖 2023-04-24 17:20 次阅读

test.c

/**
 * C语言实现的红黑树(Red Black Tree)
 *
 * @author skywang
 * @date 2013/11/18
 */


#include 
#include "rbtree.h"


#define CHECK_INSERT 0    // "插入"动作的检测开关(0,关闭;1,打开)
#define CHECK_DELETE 0    // "删除"动作的检测开关(0,关闭;1,打开)
#define LENGTH(a) ( (sizeof(a)) / (sizeof(a[0])) )


void main()
{
    int a[] = {10, 40, 30, 60, 90, 70, 20, 50, 80};
    int i, ilen=LENGTH(a);
    RBRoot *root=NULL;


    root = create_rbtree();
    printf("== 原始数据: ");
    for(i=0; i

7、分块查找

7.1、基本原理

分块查找(Block Search)是一种基于分块思想的查找算法。它将待查找的数据集合分成多个块(Block),每个块内的数据按照某种方式有序排列。这样就可以在查找时快速缩小查找范围,从而提高查找效率。

分块查找的基本原理如下:

  1. 将待查找的数据分成若干块,并将每块内的数据按照某种方式有序排列。
  2. 确定各块的范围和关键字,用一张索引表来存放各块的关键字和起始地址。
  3. 查找时,先在索引表中二分查找到关键字所在的块,然后在该块内进行线性查找,直到找到目标数据。

分块查找的注意事项和应用场景如下:

  1. 数据分块要尽量均匀,使每块数据量大致相等。
  2. 对每个块内的数据要按照某种方式有序排列,以便进行二分查找。
  3. 适合数据集合变动较少的情况,如果数据频繁变动,需要不断重构索引表,效率较低。
  4. 分块查找适合于数据量较大,但又不适合全部加载到内存中的情况,比如外部文件查找。

7.2、代码示例

#include 


// 定义块的大小
#define BLOCK_SIZE 3


// 分块查找函数
int blockSearch(int arr[], int n, int key)
{
    // 计算块的数量
    int blockCount = (n + BLOCK_SIZE - 1) / BLOCK_SIZE;


    // 创建一个块数组,存储每个块的最大值
    int blockMax[blockCount];
    for (int i = 0; i < blockCount; i++) {
        int max = arr[i * BLOCK_SIZE];
        for (int j = 1; j < BLOCK_SIZE && i * BLOCK_SIZE + j < n; j++) {
            if (arr[i * BLOCK_SIZE + j] > max) {
                max = arr[i * BLOCK_SIZE + j];
            }
        }
        blockMax[i] = max;
    }


    // 在块数组中查找key所在的块
    int blockIndex = 0;
    while (blockIndex < blockCount && blockMax[blockIndex] < key) {
        blockIndex++;
    }


    // 在块中进行线性查找
    int startIndex = blockIndex * BLOCK_SIZE;
    int endIndex = startIndex + BLOCK_SIZE;
    for (int i = startIndex; i < endIndex && i < n; i++) {
        if (arr[i] == key) {
            return i;
        }
    }


    return -1;
}


int main()
{
    int arr[] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20};
    int n = sizeof(arr) / sizeof(arr[0]);


    int key = 12;
    int index = blockSearch(arr, n, key);
    if (index == -1) {
        printf("%d not found\\n", key);
    } else {
        printf("%d found at index %d\\n", key, index);
    }


    return 0;
}

该程序定义了一个 BLOCK_SIZE 常量,表示块的大小。在分块查找函数中,首先计算块的数量,然后创建一个块数组,存储每个块的最大值。接下来,在块数组中查找key所在的块,并在该块中进行线性查找。如果找到了key,则返回其下标,否则返回-1。最后,程序使用一个示例数组来测试分块查找函数,查找数组中的一个元素并输出结果。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6512

    浏览量

    87601
  • 代码
    +关注

    关注

    30

    文章

    4556

    浏览量

    66784
  • 查找算法
    +关注

    关注

    0

    文章

    6

    浏览量

    5510
收藏 人收藏

    评论

    相关推荐

    PC电源常见问题汇总

    PC电源常见问题汇总,分享!
    发表于 04-29 16:03

    TI资深工程师对无线连接技术经验汇总常见疑难问题详细解答

    、资料、以及常见问题的详细解答、低功耗解决方案。TI 为任何应用提供跨越所有主要标准和技术的无线连接解决方案。无论是从事任何工业、汽车还是物联网的设计,助您轻松学习无线连接知识。 TI专家解答CC3200
    发表于 09-11 16:17

    简单的查找算法

    几个比较基础的查找算法:1. 无序链表的查找:主要是使用链表的遍历操作来实现对于每个元素的访问,和对比。通过在for循环中的if来判断key相等的元素。如果找到就弹出val。如果没有就返回null
    发表于 12-27 22:33

    基于Hash和二叉树的路由表查找算法

    基于Hash和二叉树的路由表查找算法 :提出了一种基于Hash和二又树的路由表查找算法,这一算法可以满足()C-768的转发要求,支持超过
    发表于 02-22 17:06 35次下载

    isis 7 professional_元件查找代码

    isis 7 professional元件查找代码有各总isis 7 professional元件的查找代码
    发表于 12-08 15:58 7次下载

    一种可变长查找表的单基快速傅里叶变换倒序算法

    为提高运算速度,降低查找表规模,在原有查找算法的基础上,提出一种单基快速傅里叶变换原址倒片算法。设计新的查找表构造
    发表于 02-24 11:31 0次下载

    详解C语言二分查找算法细节

    我相信对很多读者朋友来说,编写二分查找算法代码属于玄学编程,虽然看起来很简单,就是会出错,要么会漏个等号,要么少加个 1。
    的头像 发表于 06-22 09:05 2616次阅读
    详解C语言二分<b class='flag-5'>查找</b><b class='flag-5'>算法</b>细节

    超全分水岭算法汇总

    超全分水岭算法汇总
    发表于 10-08 10:27 0次下载

    电工接线常见案例彩色图汇总

    电工接线常见案例彩色图汇总
    发表于 11-18 15:44 53次下载

    A星路径规划算法完整代码资料汇总

    A星路径规划算法完整代码资料汇总
    发表于 12-03 17:16 11次下载

    汇总常见单片机原厂代码仓库,值得收藏

    汇总常见单片机原厂代码仓库,值得收藏
    发表于 12-03 16:06 9次下载
    <b class='flag-5'>汇总</b><b class='flag-5'>常见</b>单片机原厂<b class='flag-5'>代码</b>仓库,值得收藏

    常见查找算法汇总(含详细代码)1

    今天就把常见*查找算法也总结个通透, 还有详细代码解释, 真的是写完这篇感觉脑子已经不是自己的了,还希望大家好好利用。
    的头像 发表于 04-24 17:20 668次阅读
    <b class='flag-5'>常见</b>的<b class='flag-5'>查找</b><b class='flag-5'>算法</b><b class='flag-5'>汇总</b>(含<b class='flag-5'>详细</b><b class='flag-5'>代码</b>)1

    常见查找算法汇总(含详细代码)2

    今天就把常见****查找算法也总结个通透, 还有详细代码解释, 真的是写完这篇感觉脑子已经不是自己的了,还希望大家好好利用。
    的头像 发表于 04-24 17:20 440次阅读

    常见查找算法汇总(含详细代码)3

    今天就把常见****查找算法也总结个通透, 还有详细代码解释, 真的是写完这篇感觉脑子已经不是自己的了,还希望大家好好利用。
    的头像 发表于 04-24 17:20 489次阅读

    常见查找算法汇总(含详细代码)4

    今天就把常见****查找算法也总结个通透, 还有详细代码解释, 真的是写完这篇感觉脑子已经不是自己的了,还希望大家好好利用。
    的头像 发表于 04-24 17:20 388次阅读