有序列表中分块查找-c语言
来源:互联网 发布:网络非法赌博 编辑:程序博客网 时间:2024/05/25 19:56
#include <stdio.h>struct block_index{ int start; int end; int key;} index_key[3];int blockSearch(int key, int a[]);int main(){ int numList[16]; int i = 0; int j = 0; int key = 0; int ret = 0; printf("请输入需要查找的序列:\n"); for(i=0;i<15;i++) { scanf("%d", &numList[i]); } printf("请输入需要查找的元素:\n"); scanf("%d", &key); i = 0; while(i<3)//进行分块,因为我们要求在15个数中进行查找,所以分为3块 { index_key[i].start = j; //存储每块的起点 index_key[i].end = j+4; //存储没快的终点 index_key[i].key = numList[j+4]; //记录每块的最大值,也就是终点的值,因为我们是按从小到大输入的有序列表 j += 5;//将j拨到下一块的起始点 i++; //进入下一块 } ret = blockSearch(key, numList); //调用函数进行查找 if(0 == ret) { printf("查询失败!\n"); return -1; } else { printf("查找成功!\n其位置是%d\n", ret++); } return 0;}int blockSearch(int key, int a[]){ int i = 0 ; int j = 0; while (i<3 && key>index_key[i].key)//先确定key值在哪块 { i++; } if(i>=3)// 不在我们分的三块中,则函数结束 { return 0; } j = index_key[i].start;//确定在i块后,将此块的起始值赋给j while(j<index_key[i].end && key !=a[j])//轮训此块,确定j值,因为序列下标值是从0开始的,所以我们的返回值是j+1 j++; return j+1;}
结果:
└─[0] a.out
请输入需要查找的序列:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
请输入需要查找的元素:
1
查找成功!
其位置是1
阅读全文
0 0
- 有序列表中分块查找-c语言
- 数据结构 c语言 折半查找算法(保证有序)
- C语言实现三种有序表查找算法
- 在C语言中分割字符串
- 【二分查找】用C语言实现一个有序数组的二分查找
- 插入排序算法+优化 (二分查找优化有序部分)C语言实现
- C语言提高-第20讲: 经典:查找的艺术(有序数组中插入数据)
- 利用二分法从有序表中查找某个数值-C语言
- JAVA语言之有序矩阵查找
- C语言程序块
- C语言特性(块)
- C语言中分辨const指针的简单方法
- 几种查找算法总结与比较—顺序查找、有序查找、散列表查找
- 实现有序列表(基于数组,二分查找)
- Python 查找有序列表中指定元素所在位置
- 有序列表
- 有序列表
- 有序列表
- springmvc+sitemesh2+freemarker整合
- python运行以及过程中遇到的问题
- mean shift算法详细
- 搭建前端项目架构
- SQL Server 2012 新建数据库错误“无法获得数据库 'model' 上的排他锁”解决方案
- 有序列表中分块查找-c语言
- PAT乙级1037 在霍格沃茨找零钱
- eval函数
- J2EE中servlet模板创建
- 1.Index Mapping (or Trivial Hashing) with negatives allowed[数据结构]
- 解决open()failed (13: Permission denied) while reading upstream的问题
- 区块链应用场景探索之二:价值交换
- Unsafe 类学习笔记
- 皮皮陈专用动漫注释