c语言完成分块查找
- 首先要把一系列数组均匀分成若干块(最后一个可以不均匀)
每块中元素任意排列,即块中数字无序,但是整个块之间要有序。因此也存在局限性。
#include<stdio.h> //分块查找法
void black(int b[],int iLong,int key);//分块算法
int max(int a[],int start,int end);//寻求数组中的最大值,并返回。 int main()
{
int iLength,istars,i,iTimes,iNumber,n;
int a[];
printf("please enter the length of the array:\n ");
scanf("%d",&iLength);
printf("please enter the number:\n");
for(i=;i<iLength;i++)
{
scanf("%d",&a[i]);
}
printf("please enter the number that you want:\n");
scanf("%d",&istars); }
int max(int a[],int start,int end)//寻求数组中的最大值,并返回。
{
int i,iTemp;
for(i=start;i<end;i++)
{
if(a[i]>a[i+])
{
iTemp=a[i];
a[i]=a[i+];
a[i+]=iTemp;
}
}
return a[end];
} void black(int b[],int iLong,int key)
{
int a,b,c;
a=; }
自己首先写了如上的代码,但是这种写法发现在写分块查找模块时,越写越难找,越来越难找。所以,这种思路过于复杂。
又由于分块查找法需要分块处理,则需要结构体来实现分块查找,
但是,分块查找法要求每个块之间有序,这就很大的局限性,前一个块的最大值必须比后一个块的最小值小。因此暂定输入整个数组皆为有序。
#include <stdio.h> struct number//结构体,定义每个分块中的数据结构,且每个分块的数据结构能相同
{
int start;
int end;
int key;
}number_table[];//结构体中这个分号一定要有。 int block(int key,int a[])
{
int i,j;
i=;
while( key>number_table[i].key && i<)//确定为哪个分的块中
i++;
if(i>)
return ;
j=number_table[i].start; //设置j为每个块中的首数据。
while(key!=j && j<number_table[i].end)//在块中的什么位置。此时不能具体化为4.因为分块法最后一组不一定为4个
{
j++;
}
if(j>number_table[i].end)
j=;
return j;
}
int main()
{
int i,j,k;
int iStars; int a[];
j=;
printf("please enter fifth numbers.\n");
for(i=;i<=;i++)
{
scanf("%d",&a[i]);
}
//这个循环刚开始没写。
for(i=;i<=;i++)//i的上限表示分组情况,但有个疑问为什么上限为2的时候依旧正确呢
{
number_table[i].start=j+;//第一次循环 开始的下标为1 2循环,开始的下标为6
j++;
number_table[i].end=j+;//第一次循环 结尾的下标为5
j=j+;
number_table[i].key=a[j];//限定了最大值为最后一位 为a[5].
}
printf("please enter the number that you want:\n");
scanf("%d",&iStars); j=block(iStars,a);
if(j==)
printf("Failed\n");
else
printf("success. the number on %d\n",j);
}
但是有个疑问,为什么在for循环中i的上限可以不限定。后来经过研究发现,如果i是2的话,则运用分块查找法数列前排的可以找到,则数据后面的就发现不了,因此,i的分组情况决定了在查找时的范围。
c语言完成分块查找的更多相关文章
- C语言两种查找方式(分块查找,二分法)
二分法(必须要保证数据是有序排列的): 分块查找(数据有如下特点:块间有序,块内无序):
- 索引查找(索引查找、分块查找) C语言实现
1.基本概念 索引查找又称分级查找. 索引存储的基本思想是:首先把一个集合或线性表(他们对应为主表)按照一定的函数关系或条件划分成若干个逻辑上的子表,为每个子表分别建立一个索引项,由所有 这些索引项构 ...
- C语言之三大查找算法
查找算法 1.二分查找 二分查找就是折半查找,其基本思想是:首先选取表中间位置的记录,将其关键字与给定关键字key进行比较,若相等,则查找成功.若key值比该关键字值大,则要找的元素一定在右子表中,则 ...
- 查找->静态查找表->分块查找(索引顺序表)
文字描述 分块查找又称为索引顺序查找,是顺序查找的一种改进方法.在此查找算法中,除表本身外, 还需要建立一个”索引表”.索引表中包括两项内容:关键字项(其值为该字表内的最大关键字)和指针项(指示该子表 ...
- HDOJ1251(前缀匹配---分块查找&map应用)
分块查找算法 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm ...
- 分块查找(Blocking Search)
1.定义 分块查找(Blocking Search)又称索引顺序查找.它是一种性能介于顺序查找和二分查找之间的查找方法. 2.基本思想 分块查找的基本思想是: (1)首先查找索引表 索引表是有序表,可 ...
- 数据结构(C语言版)---查找
1.查找表:同一类型的数据元素构成的集合. 2.对查找表进行的操作:查询某特定元素.检索满足条件的元素的属性.插入元素.删除元素. 1)若对查找表进行的操作只涉及前两种,则为静态查找表:需要进行插入和 ...
- c语言经典算法——查找一个整数数组中第二大数
题目: 实现一个函数,查找一个整数数组中第二大数. 算法思想: 设置两个变量max1和max2,用来保存最大数和第二大数,然后将数组剩余的数依次与这两个数比较,如果这个数a比max1大,则先将max1 ...
- C语言实现 二分查找数组中的Key值(递归和非递归)
基本问题:使用二分查找的方式,对数组内的值进行匹配,如果成功,返回其下标,否则返回 -1.请使用递归和非递归两种方法说明. 非递归代码如下: #include <stdio.h> int ...
随机推荐
- 《转》Spring4 Freemarker框架搭建学习
这里原帖地址:http://www.cnblogs.com/porcoGT/p/4537064.html 完整配置springmvc4,最终视图选择的是html,非静态文件. 最近自己配置spring ...
- sms-provider
@ 最近测试 open-falcon. @ 首先得准备报警接口. sms-provider 邮件发送http接口: method: post params: content: 邮件内容 subject ...
- JS的URL编码
背景 URL只能使用英文字母.阿拉伯数字和某些标点符号,不能使用其他文字和符号,这是网络标准: 只有字母和数字[-9a-zA-Z].一些特殊符号"$-_.+!*'(),"[不包括双 ...
- NSCalendar NSDateComponents
// NSCalendar // 获取当前日历 NSCalendar *calendar = [NSCalendar currentCalendar]; // 获取当前时间日期的各个值 NSDate ...
- react input 获取/失去焦点
<div className={ this.state.focus ? "dis_bottom_left_onfocus" : "dis_bottom_left&q ...
- Apache和IIS服务器共存问题--来自网上内容
1.apache 主要支持PHP IIS 主要支持asp 静态的网页他们都支持入htm,端口冲突的话你可以更改其中一个服务器的端口来实现端口的避让,IIS在右击“我的电脑”“管理”“服务和应用程 ...
- 解决 Android SDK下载和更新失败“Connection to https://dl-ssl.google.com refused."
缘由: 更新sdk,遇到了更新下载失败问题: Fetching https://dl-ssl.google.com/android/repository/addons_list-2.xml Fetch ...
- Fiddler 前端工具
官网地址:http://www.telerik.com/fiddler 支持所有平台,但由于早期是基于.net开发的,对window操作系统支持较好,对mac,linux支持不够好.
- iOS 杂记
一,demo 1,视图跳转 MaryPopin: https://github.com/Backelite/MaryPopin 2,Nimbus是一个开源的iOS框架,比起Three20,Nimbu ...
- laravel框架总结(五) -- 服务提供者(提及契约Contracts)
首先理解两个概念 1.契约:一组定义了框架核心服务的接口 2.服务提供者:所有 Laravel 应用程序启动的中心所在. 包括你自己的应用程序,以及所有的 Laravel 核心服务,都是通过服务提供者 ...