分块查找
来源:互联网 发布:成都租房 知乎 编辑:程序博客网 时间:2024/05/18 03:38
分块查找是折半查找和顺序查找的一种改进方法,分块查找由于只要求索引表是有序的,对块内节点没有排序要求,因此特别适合于节点动态变化的情况。索引表分为m块,每块含有N/m个元素,块内是无序的,块间是有序的,例如块2中最大元素小于块3中最小元素。先用二分查找索引表,确定需要查找的关键字在哪一块,然后再在相应的块内用顺序查找。
#include<stdio.h>//第一块最大值小于第二块最小值,第二块最大值小于第三块最小值struct index{ int key; int start; int end;}index_table[4];int block_search(int key,int a[]){ int i=1,j; while(i<=3&&key>index_table[i].key) //确定在哪个快中 i++; if(i>3) //大于分得的块数,则返回0 return 0; j=index_table[i].start; //j等于块范围的起始值 while(j<=index_table[i].end&&a[j]!=key) //在确定的块内进行顺序查找 j++; if(j>index_table[i].end) //如果大于块范围的结束值,则说明没有要查找的数,j置0 j=0; return j;}void main(){ int i,j=0,k,key,a[16]; printf("请按序输入15个数:\n"); for(i=1;i<16;i++) scanf("%d",&a[i]); for(i=1;i<=3;i++) { index_table[i].start=j+1; //确定每个块范围的起始值 j=j+1; index_table[i].end=j+4; //确定每个块范围的结束值 j=j+4; index_table[i].key=a[j]; //确定每个块范围中元素的最大值 } printf("请输入你想查找的元素:\n"); scanf("%d",&key); k=block_search(key,a); if(k!=0) printf("查找成功!其位置是:%d\n",k); else printf("查找失败!");}
阅读全文
0 0
- 分块查找
- 分块查找
- 分块查找
- 分块查找
- 分块查找
- 分块查找
- 分块查找
- 【分块查找】
- 分块查找
- 分块查找
- 分块查找
- 分块查找
- 分块查找
- 分块查找
- 分块查找
- 分块查找
- 分块查找
- 查找--------之分块查找
- Linux内存管理详细解析
- LeetCode——Hamming Distance
- python装饰器
- leetcode 找到树中距离最大的两个结点,Python实现
- JS检测设备类型
- 分块查找
- 中国大学慕课C语言第五讲作业
- vc++ ios::in ios::out 含义
- ptmalloc
- JAVA反射机制
- springboot笔记
- NYOJ-325Zb的生日
- c++getline和get的区别
- 触发器+触发器的类型+创建触发器+查询当前用户创建的触发器