静态查找_Search
#include <stdio.h> #define MAXSIZE 50
#define OK 1
#define ERROR 0 int F[MAXSIZE];//斐波那契数列
int count; typedef int Status;//Stastu为函数返回的类型 /* a为数组, n为数组要查找的个数,key为要查找的关键字 */ Status Sequential_Search(int *a, int n, int key)
{/* 无哨兵顺序查找, 查询n次a数组中是否与key相同,相同则返回key在数组中的位置,否则返回错误 */
int i;
count = ;
for(i=; i<n; i++)
{
count ++;
if(a[i] == key)
return i;//查找到则返回位置
} return ERROR;
} Status Sequential_Search2(int *a, int n, int key)
{/* 有哨兵顺序查找,返回key在a数组中的位置 */
int i = n;
// a[28] = key;//设置哨兵
count = ;
while(a[i] != key)// 若查到
{
count ++;
i--;
}
return i;//则返回
} Status Binary_Search(int *a, int n, int key)
{/* 折半查找 */
int low = ;//定义最低下标
int high = n;//定义最高下标
int mid;//折半下标
count = ;
while(low <= high)
{
count ++;
mid = (low+high)/;//折半
if(key < a[mid])//若查找的值比中值小
high = mid -;//最高位置调整中值减一
else if(key > a[mid])//若查找的值比中值大
low = mid + ;//最低位置调整到中值加一
else //若查找的值不大于也不小于中值
return mid;//那么肯定就是相等,则返回查找值的位置
} return ERROR;
} Status Interpolation_Search(int *a, int n, int key)
{/* 插值查找 */
int low = ;
int high = n;
int mid;
count = ;
while(low <= high)
{
count ++;
mid = low + (high-low)*(key-a[low])/(a[high]-a[low]);//插值
if(key < a[mid])//若查找的值比中值小
high = mid -;//最高位置调整中值减一
else if(key > a[mid])//若查找的值比中值大
low = mid + ;//最低位置调整到中值加一
else //若查找的值不大于也不小于中值
return mid;//那么肯定就是相等,则返回查找值的位置
} return ERROR;
} Status Fibonacci_Search(int *a, int n, int key)
{/* 斐波那契序列查找 */
int mid, i, k=;
int low = ;
int high = n; //查找n的位于斐波那契数列位置
while(n > F[k])
k++; //把n到比n大的斐波那契数列之间的数组值填充
for(i=n; i<F[k]; i++)
a[i] = a[n]; count = ;
while(low <= high)
{
count ++;
mid = low + F[k-] - ;
if(key < mid)
{
high = mid - ;
k = k - ;
}
else if(key > mid)
{
low = mid + ;
k = k - ;
}
else
{
if(mid <= n)
return mid;
else
return n;
} } return ERROR;
} int main(void) {
int i, result;
int a[MAXSIZE];
for(i=; i<=MAXSIZE; i++)
a[i] = i; result = Sequential_Search(a, MAXSIZE, );//若这里要查询的是8
printf("Sequential_Search:%d, 查询用了%d次\n", result, count); result = Sequential_Search2(a, MAXSIZE, );//若这里要查询的是8
printf("Sequential_Search2:%d, 查询用了%d次\n", result, count); result = Binary_Search(a, MAXSIZE, );//若这里要查询的是8
printf("Binary_Search:%d, 查询用了%d次\n", result, count); result = Interpolation_Search(a, MAXSIZE, );//若这里要查询的是8
printf("Interpolation_Search:%d, 查询用了%d次\n", result, count); //生成斐波那契数列
F[] = ;
F[] = ;
for(i=; i<MAXSIZE; i++)
F[i] = F[i-] + F[i-]; result = Fibonacci_Search(F, MAXSIZE, );//若这里要查询的是8
printf("Fibonacci_Search:%d, 查询用了%d次\n", result, count); system("PAUSE"); return ;
}
静态查找_Search的更多相关文章
- 数据结构算法C语言实现(三十二)--- 9.1静态查找表
一.简述 静态查找表又分为顺序表.有序表.静态树表和索引表.以下只是算法的简单实现及测试,不涉及性能分析. 二.头文件 /** author:zhaoyu date:2016-7-12 */ #inc ...
- C语言数据结构基础学习笔记——静态查找表
查找:在数据集合中寻找满足某种条件的数据元素的过程称为查找. 查找表:用于查找的数据集合称为查找表,一般有以下操作:①查找是否在表中:②查找属性:③进行操作. 查找表又分为: ①静态查找表:只可以进行 ...
- 【C/C++】查找(一):静态查找表
{静态查找表 + 动态查找表} 所谓动态,就是,找的时候没有则添加,或者能删除 关键字:primary key:用来表示查找表中的一条记录 {主关键字 + 次关键字} 主关键字是唯一的,用来唯一的标识 ...
- 查找->静态查找表->次优查找(静态树表)
文字描算 之前分析顺序查找和折半查找的算法性能都是在“等概率”的前提下进行的,但是如果有序表中各记录的查找概率不等呢?换句话说,概率不等的情况下,描述查找过程的判定树为何类二叉树,其查找性能最佳? 如 ...
- 查找->静态查找表->折半查找(有序表)
文字描述 以有序表表示静态查找表时,可用折半查找算法查找指定元素. 折半查找过程是以处于区间中间位置记录的关键字和给定值比较,若相等,则查找成功,若不等,则缩小范围,直至新的区间中间位置记录的关键字等 ...
- 查找->静态查找表->顺序查找(顺序表)
文字描述 顺序查找的查找过程为:从表中最后一个记录开始,逐个进行记录的关键字和给定值的比较,若某个记录的关键字和给定值比较相等,则查找成功,找到所查记录:反之,若直至第一个记录,其关键字和给定值比较都 ...
- DS静态查找- 顺序-二分-索引
静态查找 静态表是只执行查找操作,而不执行插入.删除等操作的表. 现在常说的有五大查找方法:顺序查找.分块查找.索引查找.树查找.哈希查找. 后两种之前写过了二叉查找树和哈希表,现在回顾前面三种,它们 ...
- 查找->静态查找表->分块查找(索引顺序表)
文字描述 分块查找又称为索引顺序查找,是顺序查找的一种改进方法.在此查找算法中,除表本身外, 还需要建立一个”索引表”.索引表中包括两项内容:关键字项(其值为该字表内的最大关键字)和指针项(指示该子表 ...
- c语言描述的静态查找表
顺序表的查找: 直接循环依次和目标比较就行 有序表的查找(二分查找): int search(SS *T,Type key){ int mid; ; int high=T.length; while( ...
随机推荐
- awk 处理
find . -type f | awk '{print $NF}' | grep pdf$ |grep -v preview | while read A; do ls -ltr $A| awk ' ...
- Word Search II 解答
Question Given a 2D board and a list of words from the dictionary, find all words in the board. Each ...
- [转]Activemq管理和基本介绍
1.ActiveMQ服务器工作模型 通过ActiveMQ消息服务交换消息.消息生产者将消息发送至消息服务,消息消费者则从消息服务接收这些消息.这些消息传送操作是使用一组实现 ActiveM ...
- UGUI Image控件
今天一起学习Image控件O(∩_∩)O~ 介绍一下基本的属性 Source:Image: 指定图片源, 图片设置2DSprite(2D and UI)格式Color: ...
- poj1426 Find The Multiple
Find The Multiple Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14622 Accepted: 593 ...
- 删除一个表中的重复数据同时保留第一次插入那一条以及sql优化
业务:一个表中有很多数据(id为自增主键),在这些数据中有个别数据出现了重复的数据. 目标:需要把这些重复数据删除同时保留第一次插入的那一条数据,还要保持其它的数据不受影响. 解题过程: 第一步:查出 ...
- Swift中NSData与NSDictionary之间的相互转换
原创Blog,转载请注明出处 使用NSKeyedUnarchiver类来进行相互转换 1.NSDictionary转NSData var dictionaryExample : [String:Any ...
- java学习之数据库
第一部分:DB2基础知识 一.复习 jre jdk jvm path classpath 二.数据库基础-DB2 1.访问172.22.602.24/ temp 123 2.安装检查 db2cmd d ...
- 查看IIS进程id
Windows 2003 cscript C:\windows\system32\iisapp.vbs -a Windows 2008 C:\windows\system32\inetsrv\appc ...
- sql server保留小数解决方法
在数据库中,我们有时会用到小数,怎样在数据库中转化小数呢,下面是一些常用的方法. 1.使用Round(字段名/数字,小数保留位数)方法,如下所示: select Round(3.333,2) 结果如下 ...