目录

一、折半查找(二分查找)

二、插值查找

总代码


一、折半查找(二分查找)

原理:一次次折半,不断向着查找值的位置靠近 。

适用场景:有序(必须)

流程:开始时,min标志首,max标志尾,medium=(min+max)/2。然后即可开始查找,判断str[medium]和要查找的值是否相等:1、相等:min = medium+1         2、不相等:max=medium-1  。

//折半查找(注:前提是有序序列)
int Binary_Search(char ch)
{int min = 0, max = strlen(str)-1;int medium;while (min <= max){medium = (max + min) / 2;       //取中值if (ch == str[medium])return medium;else if (ch > str[medium])min = medium+1;               //进入右半边(medium位置已查找过,跳过)elsemax = medium-1;               //进入左半边(medium位置已查找过,跳过)}return -1;
}

二、插值查找

比例查找到最接近的位置。选取一段的比例(如:(min+小半段)*总),有序且数据分布均匀时,可以更快的定位。

适用场景:有序(必须),数值分布均匀,线性增长。

//插值查找(比例查找)
int Insert_Search(char ch)
{int medium, min = 0, max = strlen(str) - 1;while (min <= max){//取比例medium = min + (ch - str[min]) / (str[max] - str[min]) * (max - min);   if (ch == str[medium])return medium;else if (ch > str[medium])min = medium + 1;              //进入右半边(medium位置已查找过,跳过)elsemax = medium - 1;             //进入左半边(medium位置已查找过,跳过)}return -1;
}

总代码

//有序表查找(折半查找、插值查找)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string>char str[20];//输入
char Input()
{char ch = ' ';printf("请输入一串数组:\n");for (int i = 0; i < 20 && ch != '\n'; i++){scanf("%c", &ch);str[i] = ch;}printf("请输入您想要查找的字符:");scanf("%c", &ch);return ch;
}//折半查找(注:前提是有序序列)
int Binary_Search(char key)
{int min = 0, max = strlen(str)-1, mid;while (min <= max){mid = (max + min) / 2;        //取中值if (key == str[mid])return mid;else if (key > str[mid])min = mid+1;             //进入右半边(mid位置已查找过,跳过)elsemax = mid-1;             //进入左半边(mid位置已查找过,跳过)}return -1;
}//插值查找(比例查找)
int Insert_Search(char key)
{int mid, min = 0, max = strlen(str) - 1;while (min <= max){//取比例mid = min + (key - str[min]) / (str[max] - str[min]) * (max - min);if (key == str[mid])return mid;else if (key > str[mid])min = mid + 1;            //进入右半边(mid位置已查找过,跳过)elsemax = mid - 1;           //进入左半边(mid位置已查找过,跳过)}return -1;
}int main()
{char ch;ch = Input();             //输入printf("折半查找(二分查找)结果: %d\n", Binary_Search(ch));       //折半查找printf("插值查找结果:%d\n", Insert_Search(ch));                    //插值查找return 0;
}

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

  1. 【数据结构和算法笔记】线性表的查找(平均查找长度,二分法,判定树)

    查找: 给定一个值k,在含有n个元素的表中找出关键字等于k的元素,若找到,则查找成功,否则,查找失败 查找前首先确定(1)存放数据的数据结构是什么(2)元素是否有序 动态查找表:查找的同时做修改操作( ...

  2. 【数据结构与算法基础】线性表

    写在前面 挺早之前看的数据结构和算法了,但是最近刷LeetCode上题目的时候发现还不是很熟练(都忘光了....),于是狠心再来一遍.边整理边刷题,用的教材是北大裘宗燕的<数据结构与算法pyth ...

  3. 数据结构与算法第二章 线性表、栈、队列、数组、字符串、树、二叉树、哈希表的增删查

    03 增删查:掌握数据处理的基本操作,以不变应万变 通过前面课时的学习,相信你已经建立了利用数据结构去完成时空转移的思想.接下来,你需要在理论思想的指导下灵活使用.其实,要想灵活使用数据结构,你需要先 ...

  4. 数据结构与算法笔记(二) 线性表(数组描述)

    c++常用的数据描述方法是数组描述和链式描述,线性表可以用来说明这两方法,先介绍数组描述的线性表.后面再介绍链式描述的线性表. C++ STL容器vector和list相当于线性表的数组描述和链式描述 ...

  5. 数据结构与算法——线性结构——线性表及其表示

    -"一,线性结构 1.顺序储存结构直接表示 多项式. 1).使用数组来表示多项式.(用数组下标来表示指数,值来表示系数) 可以表示成: 2).使用结构数组来表示.(把系数和指数看成一个二元组 ...

  6. Java数据结构和算法:哈希表

    哈希表是一种数据结构,它可以提供快速的插入操作和查找操作. 哈希表的缺点:基于数组,数组创建后难于扩展.不能有序遍历 哈希化 把关键字转换成数组下标(哈希函数) 冲突(碰撞) 开放地址法 线性探测 / ...

  7. 【数据结构与算法】之线性表的应用和操作

    数据结构概念 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合. 数据结构的逻辑结构:数据对象中数据元素之间的相互关系,分为线性结构.树形结构.图形结构以及集合结构. 数据结构的物理结构:数 ...

  8. 沙师弟学数据结构与算法之哈希表

    哈希表 在学习Python的时候有时候会想,为什么dict和set的查找速度这么快,感觉就像是事先知道要找的元素的位置一样?在学完哈希表之后,这个问题也就够被很好的解释了. 定义 哈希表是一种根据关键 ...

  9. 头歌实践教学平台数据结构与算法:02线性表

    针对数据结构02线性表在头歌平台练习过程中的完成代码,关卡数目较多,每题思路单独在每一关中解释.如有其他需求请留言. 第一关 可以把问题转换为:遍历B中的元素,如果该元素不在A中,则把该元素插入到A中 ...

  10. 21级数据结构与算法实验1——顺序表

    7-1 顺序表的建立及遍历 分数 30 作者 陈晓梅 单位 广东外语外贸大学 读入n值及n个整数,建立顺序表并遍历输出. 输入格式: 读入n及n个整数 输出格式: 输出n个整数,以空格分隔(最后一个数 ...

最新文章

  1. Google 是如何定制 Material 主题的?
  2. Android 启动过程详解
  3. Python初学者之ModuleNotFoundError:No module named 'cv2'简单解决办法
  4. 异常错误:在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式
  5. iOS duplicate symbol for architecture arm64 解决办法
  6. 驱动开发中常用的操作和小知识
  7. 我也给要来澳大利亚的虫子们一点建议
  8. 网页图表Highcharts实践教程之图表代码构成
  9. 随机组卷功能,你值得拥有~~~
  10. stc和sac_短期成本曲线
  11. ORACLE EXP/IMP的使用详解 (解决9i(window)导入到10G的乱码问题)
  12. 45. PHP 过滤器(Filter)
  13. 第二季-专题7-ARM跑快了---时钟初始化
  14. 飞行堡垒FN+F5风扇调节失灵怎么办? 一文教你完美解决此问题
  15. 面经整理:大华C++服务器开发(2021-07-19)
  16. 获取邮箱验证码倒计时+PHP发送QQ邮件(未全)
  17. 存储容量byte 流量单位byte
  18. 基于FFmpeg的视频播放器之十一:倍速播放
  19. MAC 下Sublime text 同时编辑多行内容
  20. 基于 DocumentFormat.OpenXml 操作 Excel (1)-- 初识

热门文章

  1. INSTALL_FAILED_USER_RESTRICTED
  2. Boolean值判断2个条件之后选择一个条件
  3. Go 中 time.Parse 报错:year/month/day hour/minute/second out of range 时间格式化为什么是 2006-01-02 15:04:05?
  4. Python学习日志9月14日
  5. 使用moy快速开发后台管理系统(二)
  6. linux的mount(挂载)命令
  7. jquery checkbox勾选/取消勾选的诡异问题
  8. Oracle10g客户端远程连接数据库全过程[转]
  9. WinForm 设置初始位置在屏幕右下角
  10. oracle 撤销回退,Oracle 回滚(ROLLBACK)和撤销(UNDO)