IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 折半查找法(二分搜索法) -> 正文阅读

[数据结构与算法]折半查找法(二分搜索法)

学习C语言的时候,折半查找法应该是很多人绕不开的一个简单算法。作为一名C语言的初学者,第一次看这个算法的时候着实是有些头疼。不过仔细读读发现其实并没有想象中那么难。

? ? 折半搜索,也称二分搜索是一种在有序数组中查找某一特定元素的搜索算法。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?————摘录自百度百科

折半查找的原理很简单,从中间的元素开始,如果恰好等于中间元素,则程序结束;如果特定元素大于(小于)中间元素,则会从大于(小于)中间元素的那一部分重复之前的操作,直至找到或者为空结束。

如果我们想找到中间元素,我们首先设置最低变量low和最高变量high,进行记录最低和最高元素的脚码以便我们去找中间元素。然后设置中间变量min,记录中间变量的脚码。(下面我以一个有15个元素的数组进行演示)

a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]a[10]a[11]a[12]a[13]a[14]
01234567891011121314
low=0min=7(low+high)/2high=14

当特定值大于中间值时:

当特定值小于中间值时:

从上面的过程我们不难看出,当特定值大于中间值时,high变量不变,low变量变成了mid+1;当特定值小于中间值时,low变量不变,high变量变成了mid-1。这一点在我们写程序的时候要时刻注意,不能直接把mid的值赋值给low或者high。

那么,这个查找什么时候结束呢?当我们的low变量的值与high变量的值相等或者大于high变量的时候说明我们没有在数组中找到我们要的特定值。此时,就是程序结束的时候了。

下面,让我们看一道题和它对应的代码来体会下折半查找法吧

题目:

有15个数按从小到大的顺序存放在一个数组中,输入一个数,用折半查找的方法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。?

#include <stdio.h>
int main()
{int a[15]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14};   //特定的数组
int n,low=0,high=14,mid;
printf("请输入想要查找的数:"); 
scanf("%d",&n);     //输入想要查找的特定值
while(low<=high)    //程序结束条件
{mid=(low+high)/2;
if(n>a[mid])
low=mid+1;      //当特定值大于中间值时
if(n<a[mid])
high=mid-1;     //当特定值小于中间值
if(n==a[mid])
{printf("在数组中,是第%d个数",mid+1);
return 0;}}
printf("无此数"); 
return 0;}

?

运行结果:

?

总结?:利用折半查找法我们可以省去一个一个数字进行比较的重复操作从而节省时间。但折半查找也有个很大的缺点就是必须是一个已知长度的有序数组,而且插入删除很困难。同时要注意,在C语言中,数组脚码从”0“开始哦!

作为一个初学者,总结的可能不是很全面,请各位大佬指点。

看到这就给孩子点个赞吧^-^!

?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-22 12:35:49  更:2021-11-22 12:38:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:20:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码