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),每个块内的数据按照某种方式有序排列。这样就可以在查找时快速缩小查找范围,从而提高查找效率。
分块查找的基本原理如下:
- 将待查找的数据分成若干块,并将每块内的数据按照某种方式有序排列。
- 确定各块的范围和关键字,用一张索引表来存放各块的关键字和起始地址。
- 查找时,先在索引表中二分查找到关键字所在的块,然后在该块内进行线性查找,直到找到目标数据。
分块查找的注意事项和应用场景如下:
- 数据分块要尽量均匀,使每块数据量大致相等。
- 对每个块内的数据要按照某种方式有序排列,以便进行二分查找。
- 适合数据集合变动较少的情况,如果数据频繁变动,需要不断重构索引表,效率较低。
- 分块查找适合于数据量较大,但又不适合全部加载到内存中的情况,比如外部文件查找。
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文章
6795浏览量
88730 -
代码
+关注
关注
30文章
4719浏览量
68210 -
查找算法
+关注
关注
0文章
6浏览量
5523
发布评论请先 登录
相关推荐
简单的查找算法
几个比较基础的查找算法:1. 无序链表的查找:主要是使用链表的遍历操作来实现对于每个元素的访问,和对比。通过在for循环中的if来判断key相等的元素。如果找到就弹出val。如果没有就返回null
发表于 12-27 22:33
isis 7 professional_元件查找代码
isis 7 professional元件查找代码有各总isis 7 professional元件的查找代码
发表于 12-08 15:58
•7次下载
常见的查找算法汇总(含详细代码)2
今天就把常见****查找算法也总结个通透, 还有详细的代码解释, 真的是写完这篇感觉脑子已经不是自己的了,还希望大家好好利用。
常见的查找算法汇总(含详细代码)3
今天就把常见****查找算法也总结个通透, 还有详细的代码解释, 真的是写完这篇感觉脑子已经不是自己的了,还希望大家好好利用。
常见的查找算法汇总(含详细代码)4
今天就把常见****查找算法也总结个通透, 还有详细的代码解释, 真的是写完这篇感觉脑子已经不是自己的了,还希望大家好好利用。
评论