基础

针对顺序表进行的查找
顺序查找
插值查找

代码

#include "stdio.h"
#include "stdlib.h"
#include "io.h"
#include "math.h"
#include "time.h"#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 100 /* 存储空间初始分配量 */typedef int Status;  /* Status是函数的类型,其值是函数结果状态代码,如OK等 */int F[100]; /* 斐波那契数列 *///无序哨兵顺序查找
int Sequential_Search(int* a, int n, int key)
{int i;for (int i = 1; i <= n; i++){if (a[i] == key)return i;}return 0;
}//有哨兵顺序查找
int Sequential_Search2(int* a, int n, int key)
{a[0] = key;int i = n;while (a[i] != key){i--;}return i;
}//折半查找
int Binary_Search(int* a, int n, int key)
{int low;int high;int mid;high = n;low = 1;while (low <= high){mid = (low + high) / 2;if (key < a[mid])high = mid - 1;else if (key > a[mid])low = mid + 1;else{return mid;}}return 0;
}//插值查找
int Interpolation_Search(int* a, int n, int key)
{int low;int high;int mid;low = 1;high = n;while (low <= high){mid = low + (high - low) * (key - a[low]) / (a[high] - a[low]); /* 插值 */if (key < a[mid])     /* 若查找值比插值小 */high = mid - 1;      /* 最高下标调整到插值下标小一位 */else if (key > a[mid])/* 若查找值比插值大 */low = mid + 1;     /* 最低下标调整到插值下标大一位 */elsereturn mid;     /* 若相等则说明mid即为查找到的位置 */}return 0;
}///* 斐波那契查找 */
/* 斐波那契查找 */
int Fibonacci_Search(int* a, int n, int key)
{int low, high, mid, i, k = 0;low = 1;    /* 定义最低下标为记录首位 */high = n; /* 定义最高下标为记录末位 */while (n > F[k] - 1)k++;for (i = n; i < F[k] - 1; i++)a[i] = a[n];while (low <= high){mid = low + F[k - 1] - 1;if (key < a[mid]){high = mid - 1;k = k - 1;}else if (key > a[mid]){low = mid + 1;k = k - 2;}else{if (mid <= n)return mid;      /* 若相等则说明mid即为查找到的位置 */elsereturn n;}}return 0;
}int main(void)
{int a[MAXSIZE + 1], i, result;int arr[MAXSIZE] = { 0,1,16,24,35,47,59,62,73,88,99 };for (i = 0; i <= MAXSIZE; i++){a[i] = i;}result = Sequential_Search(a, MAXSIZE, MAXSIZE);printf("Sequential_Search:%d \n", result);result = Sequential_Search2(a, MAXSIZE, 1);printf("Sequential_Search2:%d \n", result);result = Binary_Search(arr, 10, 62);printf("Binary_Search:%d \n", result);result = Interpolation_Search(arr, 10, 62);printf("Interpolation_Search:%d \n", result);F[0] = 0;F[1] = 1;for (i = 2; i < 100; i++){F[i] = F[i - 1] + F[i - 2];}result = Fibonacci_Search(arr, 10, 62);printf("Fibonacci_Search:%d \n", result);return 0;
}

大话数据结构22:几种常见的静态查找算法相关推荐

  1. 大话数据结构读书笔记艾提拉总结 查找算法 和排序算法比较好 第1章数据结构绪论 1 第2章算法 17 第3章线性表 41 第4章栈与队列 87 第5章串 123 第6章树 149 第7章图 21

    大话数据结构读书笔记艾提拉总结 查找算法 和排序算法比较好 第1章数据结构绪论 1 第2章算法 17 第3章线性表 41 第4章栈与队列 87 第5章串 123 第6章树 149 第7章图 211 第 ...

  2. 【机器学习】几种常见的无监督学习算法

    几种常见的无监督学习算法 1. PCA 降维是指在保留数据特征的前提下,以少量的变量表示有许多变量的数据,这有助于降低多变量数据分析的复杂度.减少数据变量的方法有两种:一种是只选择重要的变量,不使用其 ...

  3. 6种常见的地标识别算法整理和总结

    本文分享自华为云社区<地标识别算法>,原文作者:阿杜 . 地标识别,基于深度学习及大规模图像训练,支持上千种物体识别及场景识别,广泛应用于拍照识图.幼教科普.图片分类等场景.本文将为大家带 ...

  4. 【大话数据结构C语言】56 二叉排序树的查找、插入和删除

    欢迎关注我的公众号是[CodeAllen],关注回复[1024]获取精品学习资源 程序员技术交流①群:736386324 ,程序员技术交流②群:371394777 目录 二叉排序树查找关键字 二叉排序 ...

  5. 【数据结构】549- 8种常见数据结构(JS实现)

    来源 | https://segmentfault.com/a/1190000020011987 本文代码较多,建议PC阅读~ 做前端的同学不少都是自学成才或者半路出家,计算机基础的知识比较薄弱,尤其 ...

  6. 【算法详解】数据结构:7种哈希散列算法,你知道几个?

    一.前言 哈希表的历史 哈希散列的想法在不同的地方独立出现.1953 年 1 月,汉斯·彼得·卢恩 ( Hans Peter Luhn ) 编写了一份IBM内部备忘录,其中使用了散列和链接.开放寻址后 ...

  7. c++ 弧形面如何逆时针排序_这8种常见的Java排序算法,学算法必看!

    在互联网的大趋势下,数据结构和算法知识,都扮演着重要的角色. 在面试中和实际工作中也是经常遇到和使用到的. 为了让大家了解java中的算法及其代码实现,小编整理出了以下常用的 8 种: 01 直接插入 ...

  8. 异常检测:PyOD工具库(含SUOD库)【包括近30种常见的异常检测算法:ABOD、HBOS、IForest、KNN、LOF、OCSVM、PCA等】【Outlier detection (OD) 】

    pyod(Python Outlier Detection)是一个集成了30余种异常检测方法和模型的Python工具箱.从经典的 LOF (SIGMOD 2000) 到近两年的 COPOD (ICDM ...

  9. 数据结构:静态查找动态查找

    概念 1.静态查找 首先无论是静态查找还是动态查找,都要有查找的对象,也就是包含很多同类型数据的"表",这个"表"可以理解为一个由同类型数据元素组成的一个&qu ...

最新文章

  1. Linux运维中如何进行网页加密?
  2. ajax图书管理案例
  3. Selenium基础知识
  4. 两个充电宝能互充电吗_国人鬼才设计,手掌大智能芯片充电宝能暖手、充电、补光镜三合一...
  5. 微信公众平台的服务号和订阅号
  6. H5新增特性之语义化标签
  7. html带图片的进度条,原生javascript上传图片带进度条【实例分享】
  8. 20165208 课下作业
  9. bzoj5138 [Usaco2017 Dec]Push a Box
  10. JAVA语言程序设计(基础篇)——第四章例题
  11. Unity3d--第三人称摄像机常用控制
  12. js中的行为委托和无类编程
  13. Java 生成N位随机数的方法
  14. CA数字证书是什么意思?SSL证书与CA数字证书有什么区别?
  15. 利用python实现汉字转拼音的2种方法
  16. excel怎么合并表格
  17. IT硬件运维的一些建议
  18. 跑步运动蓝牙耳机哪个好?跑步无线运动蓝牙耳机推荐
  19. delphi获取外网IP
  20. ffmpeg下载m3u8工具大全

热门文章

  1. UltraEdit 使用操作
  2. [转]C++中extern C的含义
  3. WEB前端学习二 JS作用域和作用域链
  4. “此图片来自微信公众平台 未经允许不可引用“ 解决办法
  5. java 多线程 交替_java 多线程–线程交替
  6. unity调整旋转需要传什么参数?参数在数学上叫做什么?_人脸识别背后,卷积神经网络的数学原理原来是这样的...
  7. html怎么添加5px高的线,CSS 0.5px 细线边框的原理和实现方式
  8. mysql及mybatis知识点_MyBatis知识点详解
  9. JavaScript数据结构与算法——队列详解(上)
  10. 归并排序的分析与Java实现