#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的更多相关文章

  1. 数据结构算法C语言实现(三十二)--- 9.1静态查找表

    一.简述 静态查找表又分为顺序表.有序表.静态树表和索引表.以下只是算法的简单实现及测试,不涉及性能分析. 二.头文件 /** author:zhaoyu date:2016-7-12 */ #inc ...

  2. C语言数据结构基础学习笔记——静态查找表

    查找:在数据集合中寻找满足某种条件的数据元素的过程称为查找. 查找表:用于查找的数据集合称为查找表,一般有以下操作:①查找是否在表中:②查找属性:③进行操作. 查找表又分为: ①静态查找表:只可以进行 ...

  3. 【C/C++】查找(一):静态查找表

    {静态查找表 + 动态查找表} 所谓动态,就是,找的时候没有则添加,或者能删除 关键字:primary key:用来表示查找表中的一条记录 {主关键字 + 次关键字} 主关键字是唯一的,用来唯一的标识 ...

  4. 查找->静态查找表->次优查找(静态树表)

    文字描算 之前分析顺序查找和折半查找的算法性能都是在“等概率”的前提下进行的,但是如果有序表中各记录的查找概率不等呢?换句话说,概率不等的情况下,描述查找过程的判定树为何类二叉树,其查找性能最佳? 如 ...

  5. 查找->静态查找表->折半查找(有序表)

    文字描述 以有序表表示静态查找表时,可用折半查找算法查找指定元素. 折半查找过程是以处于区间中间位置记录的关键字和给定值比较,若相等,则查找成功,若不等,则缩小范围,直至新的区间中间位置记录的关键字等 ...

  6. 查找->静态查找表->顺序查找(顺序表)

    文字描述 顺序查找的查找过程为:从表中最后一个记录开始,逐个进行记录的关键字和给定值的比较,若某个记录的关键字和给定值比较相等,则查找成功,找到所查记录:反之,若直至第一个记录,其关键字和给定值比较都 ...

  7. DS静态查找- 顺序-二分-索引

    静态查找 静态表是只执行查找操作,而不执行插入.删除等操作的表. 现在常说的有五大查找方法:顺序查找.分块查找.索引查找.树查找.哈希查找. 后两种之前写过了二叉查找树和哈希表,现在回顾前面三种,它们 ...

  8. 查找->静态查找表->分块查找(索引顺序表)

    文字描述 分块查找又称为索引顺序查找,是顺序查找的一种改进方法.在此查找算法中,除表本身外, 还需要建立一个”索引表”.索引表中包括两项内容:关键字项(其值为该字表内的最大关键字)和指针项(指示该子表 ...

  9. c语言描述的静态查找表

    顺序表的查找: 直接循环依次和目标比较就行 有序表的查找(二分查找): int search(SS *T,Type key){ int mid; ; int high=T.length; while( ...

随机推荐

  1. UESTC_Rain in ACStar 2015 UESTC Training for Data Structures<Problem L>

    L - Rain in ACStar Time Limit: 9000/3000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Other ...

  2. SQL Server 中使用参数化Top语句

    在T-Sql中,一般top数据不确定的情况下,都是拼sql,这样无论是效率还是可读性都不好.应该使用下面参数化Top方式:declare @TopCount int set @TopCount = 1 ...

  3. iOS加密个人见解

    说说常用的加密方式 1.单向加密,譬如 md5 .SHA 但是这种单向加密安全性也不高了,现在cpu.gpu都那么强大,运算速度很快,彩虹表 撞库 还是容易被攻破的. 如果非得用的话,可以md5加盐, ...

  4. Team Formation(思维)

    Team Formation Time Limit: 3 Seconds      Memory Limit: 131072 KB For an upcoming programming contes ...

  5. Python 单词字母顺序不变且所有倒排

    翻出google測试project师的一道题目: 设计一个函数,不论什么语言都能够,实现下面功能: 一个句子,将句子中的单词所有倒排过来,但单词的字母顺序不变.eg.  this is a real ...

  6. 用JSmooth制作java jar文件的可运行exe文件教程【图文】

    这是我之前在个人博客3yj上面写的一篇文章,如今转载过来,原文地址 (这不是广告哦) 几年前,刚接触java的是,就想用一些方法把自己的劳动果实保护起来,曾经也用过非常多这种工具,有一个特别好用,今天 ...

  7. 使用Xcode上传代码至GitHub

    几乎所有iOS程序员都上过GitHub寻找开源类库,的确,GitHub上有大量优秀的开源类库供大家学习.但是如何在Xcode中上传代码至GitHub呢? (开始之前先安装git,具体方法这里讲的很清楚 ...

  8. HEVC测试序列(百度云网盘分享)

    巧妇难为无米之炊,身为一个码农怎能碗里没有米呢?想必很多朋友都碰到下载测试序列的困惑,为了减少麻烦,现提供HEVC所有测试序列的下载,上传到百度云网盘上,方便大家下载.主要的测试序列如下: Test ...

  9. RabbitMQ消息队列安装和配置以及推送消息

    好久没有写了,最近项目用到RabbitMQ,找了一些资料试验,最后终于成功了,把安装配置的步骤分享给大家. 一.Erlang安装具体过程: 1.双击otp_win32_R16801.exe(不同版本可 ...

  10. android中列表的滑动删除仿ios滑动删除

    大家是不是觉得ios列表的滑动删除效果很酷炫?不用羡慕android也可以实现相同的效果 并且可以自定义效果,比如左滑删除,置顶,收藏,分享等等 其实就是自定义listview重写listview方法 ...