#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. C# ADO基础 SqlHelper

    class SqlHelper { //这个是将连接数据库的字符串写到配置文件中的 private static string connStr = ConfigurationManager.Conne ...

  2. java MD5加密

    public final static String MD5(String s)    {        char hexDigits[] =        { '0', '1', '2', '3', ...

  3. Linux Ubuntu download

    下载地址:http://www.ubuntu.com/download/ Ubuntu桌面用户版 符合用户个性的版本

  4. UESTC_温泉旅店 CDOJ 878

    天空飘下一朵一朵的雪花,这是一片纯白的世界. 在天空之下的温泉旅店里,雪菜已醉倒在一旁,冬马与春希看了看说着梦话的雪菜,决定找一点玩的来度过这愉快的晚上. 这家旅店提供一种特色游戏,游戏有n张牌,各写 ...

  5. iOS 10 (X8)上CoreData的使用(包含创建工程时未添加CoreData)

    1.在创建工程时未添加CoreData,后期想要使用CoreData则要在工程Appdelegate.h文件中添加CoreData库和CoreData中的通道类(用来管理类实例和CoreData之间的 ...

  6. 关于memecache的使用及清楚示意

    Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力.它可以应对任意多个连接,使用非阻塞 ...

  7. 提高你的Java代码质量吧:小心switch带来的空值异常

    一.分析  使用枚举定义常量时,会有伴有大量的switch语句判断,目的是为每个枚举解释其行为. 我们知道,目前的Java的switch语句只能判断byte.short.char.int类型(JDK7 ...

  8. 用Jfree实现条形柱状图表,java代码实现

    用Jfree实现条形柱状图表,java代码实现.可经经常使用于报表的制作,代码自己主动生成后能够自由查看.能够自由配置图表的各个属性,用来达到自己的要求和目的 package test1; impor ...

  9. stagefright框架(七)-Audio和Video的同步

    讲完了audio和video的处理流程,接下来要看的是audio和video同步化(synchronization)的问题.OpenCORE的做法是设置一个主clock,而audio和video就分别 ...

  10. C# 枚举运用"位"操作和"或"操作

    定义: /// <summary> /// The js function type(the same as name). /// </summary> [Flags] pub ...