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

制作网站一般要多少钱河东做网站公司

制作网站一般要多少钱,河东做网站公司,美容医院网站建设,asp做网站和dw的区别目录 一、什么是二分查找 二、算法思想 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://www.yayakq.cn/news/895844/

相关文章:

  • 公司网站服务费计入什么科目怎么直接用代码做网站
  • 乐清微网站建设宁波市镇海建设交通局网站
  • 让自己的电脑做网站的服务器网站建设域名的选取有讲究
  • 风格活泼的网站设计有什么做logo网站
  • 天眼查企业查询在线官网nginx wordpress优化
  • 网站网站制作公司哪家好wordpress如何换域名
  • 网站建设pc指什么软件公司建网站几天可以
  • 某企业网站建设规划书合肥做核酸最新通知
  • 网站建设寻找可以途径网深圳网站优化
  • 大型网站开发 广州购物国外网站的建立
  • 新公司刚成立做网站网站登录入口
  • 企业局域网站建设模板中国商标交易官网
  • 利用技术搭建网站做网站代理js代码网站大全
  • 华容网站建设手机如何创造网站
  • 东莞网站建设0086自助建站网站模板
  • 进入网站后台管理系统做耳机套的网站
  • 携程网站建设计划管理与进度控制厦门网站设计建设
  • wordpress多语言建站wordpress企业网站实例
  • 牡丹江有做网站的人吗住房城乡建设部网站办事大厅
  • 免费下载app软件网站网页设计素材免费版
  • 泊头那家做网站一键优化清理神器
  • 1免费网站建站可以免费发广告的网站有哪些
  • 佘山网站建设商城项目
  • 如何自己制作一个软件新网站排名优化怎么做
  • 汕头网站建设技术外包做进料加工在哪个网站上做
  • 公司网站封面怎么做.net搭建企业网站
  • 手机移动开发网站广州工商学院官网
  • 德州做网站公司排行永济市住房保障和城乡建设管理局网站
  • 网站开发进度计划书优化推广排名
  • 做医疗类网站有什么需要审核的注册公司该怎么注册