简单但实用的二分法(一)

二分法,作为一个c的初学者,基本上是都要学的,简述一下二分的思想,比如说给你10个数:1,3, 5, 4, 6, 10, 9, 8, 7, 2.让你查找其中的一个数,比如2,最容易想到的方法就是从第一个数到最后一个数遍历一遍。

for(i = 0; i < n; i++)
{
      if(a[i] == m)
       break;
}
.........

但这样是有问题的,如果n的值很大,大到1000000,,10000000,这样就明显不行,会超时。那怎么办呢?这就轮到我们的二分法出场了。

二分法,顾名思义,每次把所有数据分成两半。当然,用二分法的一个重要前提就是数列必须是有序的。也就是说,如果题目给你的数列是无序的话,必须要先给它排序才能使用二分(排序的话建议使用sort函数,可以百度到),还是那10个数,排序完之后就是:1, 2, 3, 4, 5, 6, 7, 8, 9,10。每次取中间值(mid),比如说还是找2,第一次mid = (1 + 10)/2= 5,2 < 5,所以就取区间1~5,再取mid = (1 + 5)/2 = 3,3 > 2,就再取区间1~3,再执行前面的操作就得到了要找的数2,。这样只要三次就找到了2,而第一种要找10次。对于二分来说,因为每次都是取其一半,所以1000000个数也就只要n = log1000000,也就差不多20多次。这就比一般的查找法快了很多吧。

while(l < r)    //l为左边界,r为右边界
{
      mid = (l + r) / 2;  //取中间值
      if(  mid > x )          //更新边界,画图可以理解,x为要找的值
      {
               r = mid;
       }
       if( mid < x )
      {
               l = mid;
       }
       if(mid == x)
       {
             printf("已找到该数");
        }
}
printf("未找到该数");

简单但实用的二分法(一),布布扣,bubuko.com

时间: 2024-11-14 15:12:48

简单但实用的二分法(一)的相关文章

cad怎么转换成pdf 简单又实用

作为一名技术宅,小编永远在设计CAD图形,每次设计完CAD,都要转换成pdf用email发送给客户,一开始小编被CAD怎么转换成pdf的问题弄得特憋屈,不过现在已经不用担心了,CAD转pdf那是小case,你是不是很想要知道小编是如何完成这两种格式之间的转换的?往下看,带着大家了解:cad怎么转换成pdf 简单又实用.        步骤一,打开任意浏览器,输入迅捷在线pdf转换器,找到该转换的转换网站,点击进入. 步骤二,大家可以在软件顶部菜单栏中查看该在线转换的每一个功能,鼠标放在任意项目上

SpringMVC 理论与实用技术(一) 简单、实用、易懂的几个实例

SpringMVC先来看一下百度百科中的定义; Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还可以是 Struts 这样的 Web 框架.通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术.Velo

1.5.2 从简单到实用

启动新项目,开头通常不知道到结束时代码会是什么样子,在这个阶段,代码演变很迅速.但随着项目逐渐成熟,架构更加固定,我们更关心的是解决方案的可靠性,而不是灵活性.有趣的是,这些要求并不会反映在我们所使用的编程语言和工具中:而 F# 在工具和语言两方面都很好地体现这些要求,单从这点来看,F# 就有吸引力. F# 开发过程简介 使用F# 交互式工具,用户能够在编写代码的同时立即进行验证.测试,这个工具在开发的初期非常有用,我们可以用它来尝试不同的方法,并选择最好的一个.此外,当解决一些问题时,对是否是

【转载】手把手教你使用Git(简单,实用)

手把手教你使用Git(简单,实用) 标签: git 2016年04月21日 20:51:45 1328人阅读 评论(0) 收藏 举报 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器.集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够

自建简单又实用的动态域名管理系统

个人动态域名管理系统.Personal-DDNS. 简单又实用的动态域名管理系统, 自建动态域名管理系统 使用 bind9 + php + mysql , 创建个人的动态域名系统. Use bind9 + php + mysql , create a personal ddns server, update by an URL. Only support "A","AAAA","TXT" recorder. 项目地址 https://github

读《一分钟经理人》,简单却实用的为人处事的道理

最新不知怎么,很有读书的欲望(可能压力比较大,需要靠阅读来提高自信),正好因为小组去年的突出表现,我们5人的小组得了部门的创新项目团队,获得了2000元的奖励.大家都在考虑怎么花这个钱呢,当然,吃一顿肯定是少不了的,但是也不用人均400这么奢侈,所以就想着拿一部分钱来买一些书,这样才能可持续发展嘛,下次还能再得奖. 对于买书我可积极了,在家里搜了下,确定了我自己想买的书单: <黑客与画家> <程序员修炼之道> <程序员的数学> <人月神话> <高效程序

几个简单又实用的PHP函数

简单方便使用: /** * 将多维数组转为一维数组 * @param array $arr * @return array */ function ArrMd2Ud($arr) { #将数值第一元素作为容器,作地址赋值. $ar_room = &$arr[key($arr)]; #第一容器不是数组进去转呀 if (!is_array($ar_room)) { #转为成数组 $ar_room = array($ar_room); } #指针下移 next($arr); #遍历 while (lis

利用Python自动化生成逼格高的日历!简单又实用

本次内容有感于<Python编程快速上手-让繁琐工作自动化>. 根据书中的「处理Excel电子表格」章节内容,做出一份专属日历. 使用的模块为openpyxl,一个能读取和修改Excel电子表格的Pyhton模块. 实现自动化处理表格信息,摆脱无趣无味. 此外还有calendar模块,通过该模块生成日历信息. 最后利用openpyxl和calendar库,实现自动化生成爱豆日历. / 01 / 科普 在进行代码操作前,简单对相关知识做个简单的学习. 一个Excel电子表格文档称为一个工作?.

简单易懂实用的大图轮播

<head> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>大图轮播</title> <style type="text/css"> * { margin: 0px; padding: 0px; } #container { width: 500px; h