当前位置: 首页 > 编程日记 > 正文

折半查找函数(from 《The C Programming Language》)

该函数用于判定已排序的数组array中是否存在某个特定的值value。这里假定数组元素以升序排列,如果数组array中包含value,则函数返回value在array中的位置(介于0~n-1之间的一个整数);否则,该函数返回-1。

在折半查找时,首先将value与数组array的中间元素进行比较,如果value小于中间元素的值,则接下来在该数组的前半部分查找;否则,在该数组的后半部分查找。在这两种情况下,下一步都是将value与所选部分的中间元素进行比较。这个过程一直进行下去,直到找到指定的值或者查找范围为空。

 1 #include <stdio.h>
 2 
 3 #define N 10
 4 
 5 //函数声明
 6 int binsearch(int value, int array[], int n);
 7 
 8 int main(void)
 9 {
10     int array[N] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
11     int value = 5;
12     int ret;
13 
14     ret = binsearch(value, array, N);
15     if (ret == -1)
16         printf("This value does not exist in the array.\n");
17     else
18         printf("The value in the array is in position %d.\n", ret);
19 
20     return 0;
21 }
22 
23 /* binsearch函数:在array[0]~array[n-1]中查找value */
24 int binsearch(int value, int array[], int n)
25 {
26     int low, high, mid;
27 
28     low = 0;
29     high = n - 1;
30 
31     while (low < high)
32     {
33         mid = (low + high) / 2;
34         if (value < array[mid])
35             high = mid - 1;
36         else if (value > array[mid])
37             low = mid + 1;
38         else
39             return mid;
40     }
41     return -1;
42 }
43 /*
44 The output results in Code::Blocks 10.05
45 ---------------------------------------------
46 The value in the array is in position 5.
47 ---------------------------------------------
48 */

转载于:https://www.cnblogs.com/hquljb/p/3342895.html

相关文章:

C++中的explicit关键字介绍

C中的关键字explicit主要是用来修饰类的构造函数&#xff0c;被修饰的构造函数的类&#xff0c;不能发生相应的隐式类型转换&#xff0c;只能以显示的方式进行类型转换。类构造函数默认情况下声明为隐式的即implicit。隐式转换即是可以由单个实参来调用的构造函数定义了一个从形…

Redis的集群模式

集群 即使使用哨兵&#xff0c;此时的Redis集群的每个数据库依然存有集群中的所有数据&#xff0c;从而导致集群的总数据存储量受限于可用存储内存最小的数据库节点&#xff0c;形成木桶效应。由于Redis中的所有数据都是基于内存存储&#xff0c;这一问题就尤为突出了尤其是当使…

刚上线就报名2000人!8位大牛免费讲座,再不报名就满额了!

今年是CSDN的第20年&#xff0c;我们已经不再满足解决你的技术问题&#xff0c;还要帮你解决人生大事&#xff01;为了让你飞黄腾达&#xff0c;我们特别邀请到了8位大牛老师进行直播&#xff0c;他们已经实现了成为技术总监、创业、财富自由的梦想&#xff0c;这场直播&#x…

排序算法之插入排序

插入排序一般分为直接插入排序和二分插入排序。一、直接插入排序&#xff1a;直接插入排序又可以分为前插和后插&#xff0c;不过虽然是这样分&#xff0c;只是寻找地点的方向不一样而已。“前插”就是从头开始找合适的位置&#xff0c;“后插”就是从后面开始找合适的位置。直…

C++中#error/assert/static_assert的区别及使用

C 语言支持可帮助您调试应用程序的三个错误处理机制&#xff1a;#error 指令、static_assert 关键字和 assert (CRT) 宏。所有的三种机制都会发出错误消息。#error可看做预编译期断言&#xff0c;甚至都算不上断言&#xff0c;仅仅能在预编译时显示一个错误信息&#xff0c;它能…

读完ACL 2019录取的30篇知识图谱论文,我发现了这5点趋势

作者 | Michael Galkin译者 | Freesia编辑 | 夕颜出品 | AI科技大本营&#xff08;ID: rgznai100&#xff09;【导读】近年来&#xff0c;自然语言处理领域中广泛应用的知识图谱&#xff08;KGs&#xff09;正在不断地吸引人们的目光&#xff0c;此次 ACL 2019 中的有关于知识图…

力扣(LeetCode)933

题目地址&#xff1a;https://leetcode-cn.com/probl...题目描述&#xff1a;写一个 RecentCounter 类来计算最近的请求。 它只有一个方法&#xff1a;ping(int t)&#xff0c;其中 t 代表以毫秒为单位的某个时间。 返回从 3000 毫秒前到现在的 ping 数。 任何处于 [t - 3000, …

2013年10月1日C#随机数

最近开始接触C跟C#&#xff0c;总是有人说女生本来就不适合做程序&#xff0c;就连今天都听到有人这样跟我讲&#xff0c;不过呢没有关系&#xff0c;我相信男生不一定比女生厉害多少&#xff0c;就好像我身边就有一位男生就总是觉得我的程序比他好一点就是理所当然的&#xff…

C/C++中inline/static inline/extern inline的区别及使用

引入内联函数的目的是为了解决程序中函数调用的效率问题&#xff0c;也是用内联函数取代带参宏定义&#xff08;函数传参比宏更加方便易用&#xff09;inline关键字用来定义一个类的内联函数。在类体中和类体外定义成员函数是有区别的&#xff1a;在类体中定义的成员函数为内联…

RISC-V架构上的Debian和Fedora现状

RISC-V仍然是开源/Linux用户非常感兴趣的&#xff0c;因为它是免版税且完全开放的CPU架构。部分原因是由于缺乏经济实惠的RISC-V硬件&#xff0c;限制了开发人员在这种架构上的更多工作&#xff0c;Linux发行版支持的RISC-V状态各不相同&#xff0c;但近年来至少有所改善。在上…

字节跳动李航:自学机器学习,研究AI三十载,他说AI发展或进入平缓期

作者 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;【导读】一阵凉风吹过人工智能&#xff0c;让这个曾是燥热的领域逐渐冷却下来&#xff0c;留下的是扎实地在做研究的人、机构、企业。先后在 NEC 公司中央研究所、微软亚洲研究院、华为诺亚方舟实验室从事和…

PC上安装MAC X Lion

PC上安装MACXLion网上关于如何在PC下安装MAC的文章已近不少了&#xff0c;但对于一些初学者在实践当中会遇到各种问题&#xff0c;以下视频资料为大家展示两种虚拟机安装MacOS。1.VmwareWorkstation在虚拟机中安装首先将插件装好&#xff08;在远景上下载&#xff09;&#xff…

C++中static_cast/const_cast/dynamic_cast/reinterpret_cast的区别和使用

C风格的强制转换较简单&#xff0c;如将float a转换为int b&#xff0c;则可以这样&#xff1a;b (int)a&#xff0c;或者bint(a)。 C类型转换分为隐式类型转换和显示类型转换。 隐式类型转换又称为标准转换&#xff0c;包括以下几种情况&#xff1a; (1)、算术转换&#x…

行为型模式:命令模式

LieBrother原文&#xff1a; 行为型模式&#xff1a;命令模式 十一大行为型模式之三&#xff1a;命令模式。 简介 姓名 &#xff1a;命令模式 英文名 &#xff1a;Command Pattern 价值观 &#xff1a;军令如山 个人介绍 &#xff1a; Encapsulate a request as an object,ther…

与旷视、商汤等上百家企业同台竞技?AI Top 30+案例评选等你来秀!

人工智能历经百年发展&#xff0c;如今迎来发展的黄金时期。目前&#xff0c;AI 技术已涵盖自然语言处理、模式识别、图像识别、数据挖掘、机器学习等领域的研究&#xff0c;在汽车、金融、教育、医疗、安防、零售、家居、文娱、工业等行业获得了令人印象深刻的成果。在各行业宣…

在CSS中定义a:link、a:visited、a:hover、a:active顺序

摘自&#xff1a;http://www.qianyunlai.com/post-2.html以前用CSS一直没有遇到过这个问题&#xff0c;在最近给一个本科同学做的项目里面。出现一些问题&#xff0c;搜索引擎查了一些网站和资料&#xff0c;发现很多人问到这个问题&#xff0c;给出的结果我试了试&#xff0c;…

C++中istream的使用

在项目中会经常用到读取一些配置数据&#xff0c;这些数据根据实际需要有可能会调整&#xff0c;如果将这些数据直接嵌入进代码中会非常不便&#xff0c;需要经常调整代码。将这些数据写入配置文件中然后在读入&#xff0c;如果需要调整&#xff0c;只需修改配置文件&#xff0…

手把手教你用Python模拟登录淘宝

作者 | 猪哥66来源 | 裸睡的猪&#xff08;ID:IT--Pig&#xff09;最近想爬取淘宝的一些商品&#xff0c;但是发现如果要使用搜索等一些功能时基本都需要登录&#xff0c;所以就想出一篇模拟登录淘宝的文章&#xff01;看了下网上有很多关于模拟登录淘宝&#xff0c;但是基本都…

Python之机器学习K-means算法实现

一、前言&#xff1a; 今天在宿舍弄了一个下午的代码&#xff0c;总算还好&#xff0c;把这个东西算是熟悉了&#xff0c;还不算是力竭&#xff0c;只算是知道了怎么回事。今天就给大家分享一下我的代码。代码可以运行&#xff0c;运行的Python环境是Python3.6以上的版本&#…

C++中模板的使用

模板(Template)指C程序设计语言中的函数模板与类模板&#xff0c;是一种参数化类型机制。模板是C泛型编程中不可缺少的一部分。C templates enable you to define a family of functions or classes that can operate on different types of information.模板就是实现代码重用机…

php面试问答

结合实际PHP面试&#xff0c;汇总自己遇到的问题&#xff0c;以及网上其他人遇到的问题&#xff0c;尝试提供简洁准确的答案包含MySQL、Redis、Web、安全、网络协议、PHP、服务器、业务设计、线上故障、个人简历、自我介绍、离职原因、职业规划、准备问题等部分 GitHub: https:…

图解LSTM与GRU单元的各个公式和区别

作者 | Che_Hongshu来源 | AI蜗牛车 &#xff08;ID: AI_For_Car)因为自己LSTM和GRU学的时间相隔很远&#xff0c;并且当时学的也有点小小的蒙圈&#xff0c;也因为最近一直在用lstm&#xff0c;gru等等&#xff0c;所以今天没事好好缕了一下&#xff0c;接下来跟着我一起区分并…

iphone越狱神器

前阵子刚刚换了iphone5&#xff0c;老婆的4就留给我了。一到手就决定越狱&#xff0c;无意中发现了一款越狱神器&#xff1a;爱思助手http://www.i4.cn/ 确实很好用转载于:https://blog.51cto.com/shanks/1306423

json11库的使用

JSON(JavaScript Object Notation)是一种轻量级的文本数据交换格式&#xff0c;易于让人阅读。同时也易于机器解析和生成。尽管JSON是Javascript的一个子集&#xff0c;但JSON是独立于语言的文本格式&#xff0c;并且采用了类似于C语言家族的一些习惯。JSON解析器和JSON库支持许…

覆盖10亿设备,月活2亿,快应用要取代App?

作者 | 伍杏玲 来源 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 2017 年 1 月 9 日&#xff0c;微信小程序横空出世&#xff0c;紧接着支付宝小程序、百度智能小程序、今日头条小程序、12 大厂商联盟的快应用等布局小程序。自此&#xff0c;小程序迅速改变国内移…

跨域的四种方式

本文主要是关于跨域的几种方式&#xff0c;关于什么是跨域这里就不多说了&#xff0c;写这个也是为了记住一些知识点的。 一. jsonp jsonp的跨域方式很容易理解&#xff0c;页面的的每一个script标签浏览器都会发送get请求获取对应的文本资源&#xff0c;获取到了之后&#xff…

使用模式创建一个面向服务的组件中间件

引言 在本文中&#xff0c;您将了解面向服务的组件中间件在用于资源有限的语音设备时&#xff0c;在设计阶段所应用的模式。它涵盖了项目的问题上下文&#xff0c;并被看成是一组决定因素&#xff0c;是对相关体系结构远景的一个简要概括。您还会得到一份描述&#xff0c;其中介…

OpenCV代码提取:遍历指定目录下指定文件的实现

OpenCV 3.1之前的版本&#xff0c;在contrib目录下有提供遍历文件的函数&#xff0c;用起来比较方便。但是在最新的OpenCV 3.1版本给去除掉了。为了以后使用方便&#xff0c;这里将OpenCV 2.4.9中相关的函数给提取了出来&#xff0c;适合在Windows 64bits上使用。directory.hpp…

姚班三兄弟3万块创业八年,旷视终冲刺港股

作者 | 余洋洋 杨健楷编辑 | 张丽娟来源 | CV智识&#xff08;ID:CVAI2019&#xff09;旷视此次 IPO 或将成为整个 AI 行业的信号&#xff0c;不只是“ 四小龙”的另外三家——商汤、依图、云从&#xff0c;整个 AI 行业的创业公司都将受到影响。8月25日晚&#xff0c;AI 独角兽…

Java类加载器详解

Java虚拟机中的类加载有三大步骤&#xff1a;&#xff0c;链接&#xff0c;初始化&#xff0e;其中加载是指查找字节流&#xff08;也就是由Java编译器生成的class文件&#xff09;并据此创建类的过程&#xff0c;这中间我们需要借助类加载器来查找字节流&#xff0e; Java虚拟…