静态查找_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( ...
随机推荐
- PV与并发之间换算的算法 换算公式
- POJ 3259 Wormholes( bellmanFord判负环)
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 36425 Accepted: 13320 Descr ...
- Number of Containers(数学) 分类: 数学 2015-07-07 23:42 1人阅读 评论(0) 收藏
Number of Containers Time Limit: 1 Second Memory Limit: 32768 KB For two integers m and k, k is said ...
- Nginx学习之四-Nginx进程同步方式-自旋锁(spinlock)
自旋锁简介 Nginx框架使用了三种消息传递方式:共享内存.套接字.信号. Nginx主要使用了三种同步方式:原子操作.信号量.文件锁. 基于原子操作,nginx实现了一个自旋锁.自旋锁是一种非睡眠锁 ...
- Android实战技巧之十九:android studio导出jar包(Module)并获得手机信息
AS中并没有独立的Module 工程,可是能够在普通的Project中增加Module.所谓的Module就是我们通常所指的模块化的一个单元.并经常以jar包的形式存在.以下以一个获取手机信息的样例演 ...
- H5页面之iphone6的适配
兼容iphone各版本机型最佳的方式就是自适应. 1.viewport 简单粗暴的方式: 1 <meta name="viewport" content="widt ...
- 【二分答案】【POJ3122】【Northwestern Europe 2006】Pie
Pie Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10629 Accepted: 3744 Special Ju ...
- Sublime+Emmet
Sublime使用Package Control安装Emmet插件: 按Ctrl+Shift+P命令板 输入install然后选择install Package,然后输入emmet找到 Emmet C ...
- SQL中Truncate的用法(转)
转自:http://www.studyofnet.com/news/555.html 本文导读:删除表中的数据的方法有delete,truncate, 其中TRUNCATE TABLE用于删除表中的所 ...
- SQL随机查询,显示行号,查询数据段
1.显示行号 如果数据没有删除的情况下主键与行号是一致的,但在删除某些数据,行号就与主键不一致了,这时需要查询行号就需要用新的方法,在SQL Server2005之前,需要使用临时表,但在SQL Se ...