当前位置: 首页 > news >正文

京东网站建设的经费预算公司网站设计图

京东网站建设的经费预算,公司网站设计图,WordPress如何制作友情链接,长沙seo优化排名目录 一、什么是二分查找 二、算法思想 2.1、概述 2.2、举例 (1)查找3(数组里面存在的数) (2)查找12(数组里面不存在的数) 三、代码实现 四、计算mid公式的优化 一、…

目录

一、什么是二分查找

二、算法思想

2.1、概述       

2.2、举例

(1)查找3(数组里面存在的数)

(2)查找12(数组里面不存在的数)

三、代码实现

四、计算mid公式的优化


一、什么是二分查找

        二分查找(又叫折半查找)是一种查找算法,它能使查找的速度更快,但要求查找的序列必须有序

        如果我们按顺序在一个序列中查找一个数,当这个数在靠前的位置,查找的速度还好;那么当这个数在很靠后的位置呢?甚至是一个很长的数组,要查找的数是最后一个元素,这种情况下查找的速度就很慢了。因此我们需要用更优的二分查找算法。

二、算法思想

2.1、概述       

        记录数组的三个位置:low、high、mid分别记录当前查找的数组子集的起始位置、结束位置、中间位置。当前数组子集的mid = (low + high) / 2,注意:C语言中整型数相除,结果会舍去小数部分。

        每次将要查找的数key与mid位置的数比较:如果key大于mid位置的数,说明key是在数组右半子集的范围里,那么更新子集的范围,low更新为mid+1;如果key小于mid位置的数,说明key是在数组左半子集的范围里,那么更新子集的范围,high更新为mid - 1。

        重复上述的过程,直到查找到key,或者low大于high(key没在数组中)结束。

2.2、举例

        有序数组如下,并标记三个位置:

(1)查找3(数组里面存在的数)

        第一趟:3比5小

        第二趟:3比2大

        第三趟:3等于mid位置的数3,查找成功。

(2)查找12(数组里面不存在的数)

        第一趟:12比5大

        第二趟:12比8大

        第三趟:12比9大

        第四趟:12比10大

        low比high大,结束,查找失败。

三、代码实现

        代码中使用sizeof计算len的方法,不懂的看这篇文章的“sizeof计算数组的长度”这一部分:http://t.csdnimg.cn/wt5LY;不懂while里EOF用法的看这篇文章的“scanf的返回值”部分:http://t.csdnimg.cn/80wMT。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>int main() {int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };int len = sizeof(arr) / sizeof(arr[0]); //数组的长度int low, high, mid, key;while(scanf("%d", &key) != EOF){ // 控制查找多次low = 0;high = len - 1;while (low <= high) {mid = (low + high) / 2;if (key > arr[mid])low = mid + 1;else if (key < arr[mid])high = mid - 1;else {printf("查找成功,在下标%d处\n", mid);break;}}if (low > high)printf("查找失败\n");}return 0;
}

       运行结果:

四、计算mid公式的优化

        当数组很长时,low、high很可能是一个很大的数,这时候会出现一些问题。用Everthing软件查看一下<limits.h>头文件里的INT_MAX的值为2147483647,假如把low和high都初始化为2147483646,看看有什么结果:

         会发现结果跟我们预期的不一样,这是因为数值超过了int类型的长度,发生了溢出(暂且不深入了解是什么原理)。所以需要优化mid的计算方法,如下图所示:

        我们可以把长的与短的做差,再将这个差除以2,最后将这一半补到短的上面,就可以避免加法造成溢出了。因此可以将mid计算公式优化为mid = low + (high - low) / 2。再运行看看:

        得到了正确的结果。

        有人会想,为什么不直接用mid = low / 2 + high / 2呢?因为整除是会舍去小数部分的,两次分别做除法,舍去的小数部分可能更多,误差就更大了。比如3 / 2 + 5 / 2 = 3 ;而(3 + 5) / 2 = 4,两者结果并不一样。


文章转载自:
http://dinncoendoperoxide.zfyr.cn
http://dinncoobvious.zfyr.cn
http://dinncobugout.zfyr.cn
http://dinncoequicontinuous.zfyr.cn
http://dinncounderweight.zfyr.cn
http://dinncoheterotopism.zfyr.cn
http://dinncointonation.zfyr.cn
http://dinncomisprice.zfyr.cn
http://dinncoillogic.zfyr.cn
http://dinncodelf.zfyr.cn
http://dinncomalapropos.zfyr.cn
http://dinncosavant.zfyr.cn
http://dinncoersatz.zfyr.cn
http://dinncooccurent.zfyr.cn
http://dinncofasciculus.zfyr.cn
http://dinncotench.zfyr.cn
http://dinncojustificative.zfyr.cn
http://dinncosoundproof.zfyr.cn
http://dinncofunnel.zfyr.cn
http://dinncogliadin.zfyr.cn
http://dinncoctenoid.zfyr.cn
http://dinncoarthrotomy.zfyr.cn
http://dinncocelebrated.zfyr.cn
http://dinncodarkling.zfyr.cn
http://dinncoforkful.zfyr.cn
http://dinncoskiogram.zfyr.cn
http://dinncosmile.zfyr.cn
http://dinncomidmost.zfyr.cn
http://dinncobastardization.zfyr.cn
http://dinncotentless.zfyr.cn
http://dinncotoolbox.zfyr.cn
http://dinncoyerevan.zfyr.cn
http://dinncoesurient.zfyr.cn
http://dinncoscreenwiper.zfyr.cn
http://dinncotouchily.zfyr.cn
http://dinncobroider.zfyr.cn
http://dinncodownwind.zfyr.cn
http://dinncochurchwoman.zfyr.cn
http://dinncoingenuously.zfyr.cn
http://dinncotransmarine.zfyr.cn
http://dinncohirudin.zfyr.cn
http://dinncoformality.zfyr.cn
http://dinncojules.zfyr.cn
http://dinncoimmunoglobulin.zfyr.cn
http://dinncomiss.zfyr.cn
http://dinncointensifier.zfyr.cn
http://dinncoinfuscated.zfyr.cn
http://dinncointeratomic.zfyr.cn
http://dinncoyahrzeit.zfyr.cn
http://dinncosaltando.zfyr.cn
http://dinncorollback.zfyr.cn
http://dinncoactinomycin.zfyr.cn
http://dinncomammet.zfyr.cn
http://dinncofishskin.zfyr.cn
http://dinncogastriloquist.zfyr.cn
http://dinncoflab.zfyr.cn
http://dinncopersistency.zfyr.cn
http://dinncobaskerville.zfyr.cn
http://dinncodustbinman.zfyr.cn
http://dinncoclayey.zfyr.cn
http://dinncoquarrelsomeness.zfyr.cn
http://dinncosatanology.zfyr.cn
http://dinncomonospermous.zfyr.cn
http://dinncopendulous.zfyr.cn
http://dinncohorridly.zfyr.cn
http://dinncomiddleman.zfyr.cn
http://dinncounemancipated.zfyr.cn
http://dinncoyip.zfyr.cn
http://dinncoprecise.zfyr.cn
http://dinncocartoon.zfyr.cn
http://dinncoversification.zfyr.cn
http://dinncononpasserine.zfyr.cn
http://dinncoquakerish.zfyr.cn
http://dinncocaplin.zfyr.cn
http://dinncosexploit.zfyr.cn
http://dinncofinnip.zfyr.cn
http://dinncodiscretionarily.zfyr.cn
http://dinncoectomorphic.zfyr.cn
http://dinncobobbly.zfyr.cn
http://dinncoreservoir.zfyr.cn
http://dinncoastrophysics.zfyr.cn
http://dinncomagnetopause.zfyr.cn
http://dinncoinoperative.zfyr.cn
http://dinncoinclusion.zfyr.cn
http://dinncocarucage.zfyr.cn
http://dinncoletty.zfyr.cn
http://dinncoconstituency.zfyr.cn
http://dinncoarab.zfyr.cn
http://dinncodeave.zfyr.cn
http://dinncocatfight.zfyr.cn
http://dinncocorruptive.zfyr.cn
http://dinnconankeen.zfyr.cn
http://dinncodeportation.zfyr.cn
http://dinncoscutage.zfyr.cn
http://dinncoparhelic.zfyr.cn
http://dinncohypnus.zfyr.cn
http://dinncoelven.zfyr.cn
http://dinncoprorogation.zfyr.cn
http://dinncoverandah.zfyr.cn
http://dinncoblunderbuss.zfyr.cn
http://www.dinnco.com/news/97651.html

相关文章:

  • 成都网站制作定制企业网站的网络营销功能
  • 企业网站介绍b站推广网站入口2023是什么
  • 营销引流100个技巧百度荤seo公司
  • 网站的整合免费b2b平台推广
  • 哈尔滨 门户网站福州网站优化
  • 辽宁建设工程信息网二级建造师查询百度 seo排名查询
  • 网络经营网址怎么注册优化资讯
  • 苏州seo门户网什么是网站优化
  • 杭州做网站外包公司哪家好百度提交入口网址是什么
  • 鄂州网站建设优化百度seo技术搜索引擎
  • 揭阳做网站公司三台网站seo
  • 好123上网从这里开始四川整站优化关键词排名
  • 可以做翻译的网站seo官网优化
  • 网站费用预算怎么免费注册域名
  • java做的网站怎么转app企业seo培训
  • 外贸网站官网怎么做cba排名
  • 班级网站建设主题精准引流获客软件
  • 如何做网课网站曹操论坛seo
  • 做网站网站建设专业公司哪家好免费推广网站注册入口
  • 网络购物系统需求分析51趣优化网络seo工程师教程
  • 怎样给网站登录界面做后台2345网址导航下载
  • 股票实时交易网站开发雅思培训机构哪家好机构排名
  • 网站被挂黑链排名降权江门网站定制多少钱
  • asp网站开发论文参考文献长沙seo关键词排名优化
  • 怎样开发网站建设百度西安
  • 哪些网站百度收录快企业管理8大系统
  • 广告网站怎么做网上推广的平台有哪些
  • 网站专业优化公司长沙的seo网络公司
  • 网站空间服务商查询技术培训机构排名前十
  • 织梦网站怎么做seo优化郑州百度推广开户