顺序查找即线性查找,通常分为一般无序线性表的顺序查找和有序顺序表的顺序查找。
一般线性表的顺序查找:从线性表的一端开始,逐个检查关键字是否满足条件,若存在则查找成功,返回线性表的位置;否则查找失败。
有序表顺序查找:即查找之前就已知顺序表是排序了的。假设线性表L是按关键字从小到大排列的,查找的顺序是从前往后查找,待查找元素的关键字为key,
当查找到第i个元素时,发现第i个元素对应的关键字小于key,但第i+1个元素的关键字均大于key,所以表中不存在关键字为key的元素。

折半查找:又称为二分法查找,仅适用于有序的顺序表。基本思路为:首先将给定值key与表中中间位置元素的关键字比较,若相等,则查找成功,返回元素位置,
若不等,则所需查找的元素只能在中间元素以外的前半部分或后半部分中(例如:若升序表中,给定的key大于中间元素的关键字,则所查找的元素只可能在后半部分)。

然后缩小范围继续进行同样的查找,如此重复直至找到为止,或者查找失败。

//
// Created by Administrator on 2018/7/6.
//
#include "stdio.h"/*** 顺序查找法1* @param str* @param n* @param key* @return*/
int search1(int str[], int n, int key) {for (int i = 0; i < n; ++i) {if (str[i] == key) {return i;}}return -1;
}/*** 顺序查找法 (哨兵模式:0号单元留空)* @param str* @param n* @param key* @return*/
/*int search2(int str[], int n, int key) {str[0] = key;while (str[n] != key) {n--;}return n;
}*//*** 折半查找法* @param str* @param len* @param key* @return*/
int halfSearch(int str[], int len, int key) {int low, high, mid;low = 0;high = len - 1;while (low <= high) {mid = (low + high) / 2;if (str[mid] == key) {return mid;} else if (str[mid] < key) {//rightlow = mid + 1;} else if (str[mid] > key) {//lefthigh = mid - 1;}}return -1;
}/*** 插值法(按比例查找:经测试 存在局限性)* @param str* @param len* @param key* @return*/
/*int precentSearch(int str[], int len, int key) {int low, high, mid;low = 0;high = len - 1;while (low <= high) {mid = low + (key - str[low] / str[high] - str[low]) * (high - low); // 插值查找的唯一不同点if (str[mid] == key) {return mid;} else if (str[mid] < key) {//rightlow = mid + 1;} else if (str[mid] > key) {//lefthigh = mid - 1;}}return -1;
}*/int main() {int str[9] = {1, 1, 2, 3, 5, 8, 13, 21, 34};int key = 3;int i;
//    i = precentSearch(str, 9, key);
//    printf("按比例查找法查找到关键字 %d 的位置为 %d \n", key, i);i = search1(str, 9, key);printf("顺序查找法1查找到关键字 %d 的位置为 %d \n", key, i);
//    i = search2(str, 9, key);
//    printf("顺序查找法2查找到关键字 %d 的位置为 %d \n", key, i);i = halfSearch(str, 9, key);printf("折半查找法查找到关键字 %d 的位置为 %d \n", key, i);return 0;
}  

数据结构-顺序查找和折半查找相关推荐

  1. 数据结构—查找(顺序查找和折半查找)

    1.顺序查找的查找表的数据结构 typedef struct{Elemtype *elem;int TableLen; //表的长度 }SeqList; 2.顺序查找的主要代码 //一般线性表的顺序查 ...

  2. C语言数据结构顺序表的顺序查找和折半查找的功能

    C语言顺序表顺序查找和折半查找的基本思想和应用 顺序查找算法:又称为线性查找,主要用在-线性表-中进行查找 通常分为:1-无序线性表的一般查找: 2-对关键字有序的顺序表查找: 优缺点分析: 缺点:当 ...

  3. 数据结构之查找-顺序查找,折半查找,分块查找

    文章目录 一.顺序查找 1.1 无序表的顺序查找 1.2 有序表的顺序查找 二.折半查找 三.分块查找 一.顺序查找 顺序查找又称线性查找,主要用于在线性表中进行查找. 1.1 无序表的顺序查找 对无 ...

  4. 数据结构之二分查找(折半查找)

    数据结构之二分查找(折半查找) 二分查找又称折半查找,优点是次数比较少,查找速度快,平均性能好,其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.首先 ...

  5. 顺序查找、折半查找、分块查找

    目录 一.查找的基本概念 二.顺序查找 一般线性表的顺序查找 有序线性表的顺序查找 三.折半查找 折半查找的算法 判定树 四.分块查找 一.查找的基本概念 查找:在数据集合中寻找满足某种条件的数据元素 ...

  6. 查找(包括顺序查找和折半查找)

    顺序查找 顺序查找又叫线性查找,主要用于线性表中的查找.顺序查找通常情况下分为对一般无序线性表的查找和对按关键字有序的顺序表的查找.下面进行比较讨论: 1.一般线性表的查找 作为一个直观的查找方法,其 ...

  7. 带有哨兵的顺序表查找和二分法查找(折半查找)(java)代码+说明

                                         带有哨兵的顺序表查找和二分法查找(折半查找)(java)代码+说明 一:带有哨兵的顺序表查找 1.算法设计:          ...

  8. 顺序查找、折半查找的区别与联系

        顺序查找.折半查找,都是在一个线性表中,查找指定的关键字.它们的区别是,折半查找需要该线性表本身是有序的,而顺序查找则没有这个限制.对比其时间复杂度,如下: 算法对比 顺序查找 折半查找 (二 ...

  9. 数据结构与算法(8-2)有序表查找(折半查找(二分查找)、插值查找)

    目录 一.折半查找(二分查找) 二.插值查找 总代码 一.折半查找(二分查找) 原理:一次次折半,不断向着查找值的位置靠近 . 适用场景:有序(必须) 流程:开始时,min标志首,max标志尾,med ...

  10. java 用折半查找,java折半查找算法

    //当 low>high 时表示查找区间为空,查找失败 } Java 代码: /** * 二分查找算法 * * @param srcArray 有序数组 * @param target 被查找的 ...

最新文章

  1. 将指定目录下的sql文件名写入到txt文件中
  2. 什么是 TCC分布式事务
  3. 《MySQL——查询长时间不返回的三种原因与查询慢的原因》
  4. 【一类题】二维数点的几个做法
  5. NodeJS中使用SQLite3
  6. 加拿大上市矿企Bitfarms完成第二笔1500万美元普通股私人认购
  7. 存储服务器之间的传输速度与服务器内部读写速度_3000MB/s读写带来的PC体验升级,东芝RD500固态硬盘评测...
  8. abaqus失效单元删除_abaqus删除失效单元
  9. 机器学习笔记(《统计学习方法》李航and《机器学习》周志华)
  10. protues仿真技巧——制作PCB图
  11. php上课随机点名,课堂随机点名软件
  12. Seeds超像素分割
  13. linux 如何重建mbr,重建mbr要不要勾选
  14. 数据分析--数据预处理
  15. ftp怎么用计算机打开 不用浏览器打开,win7 访问ftp站点 不用浏览器显示
  16. 蓝色学校网站模板_中小学网站源码_学校网站管理系统
  17. (已解决)报错:collect2 error ld returned 1 exit status
  18. dx12的resource barrier
  19. Oracle EBS 统计数据收集模式(Gather Schema Statistics)报错处理
  20. EXCEL查找与引用函数

热门文章

  1. nodejs mysql 连接池初始化_nodejs之mysql连接池
  2. 如何新建分支上传_如何创建git分支?
  3. ​“统治”移动处理器市场的Arm为何明年Q1才发布AI处理器?
  4. 关于处理小数点位数的几个oracle函数
  5. CCNA学习心得(一)
  6. 系统的crontab设定:/etc/crontab
  7. Mac,WIN下支撑 IPV6的 sftp客户端
  8. Ext JS 5初探(二) ——Bootstrap.js
  9. linux 之 getopt_long()
  10. 摘:常用函数(包括:宽字符函数、普通C函数 )