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

例25:二分查找

二分查找大一的时候是试图写过一次的,但当时因为还加了一种其他算法,所以也没有写出来,之后对它有了一种很难的感觉,但现在一看,其实也非常简单。它其实就是好像电气工程师找电线断点一样,对半找,理论上最快。哎,我实在不知道这算法的思想该怎么去说,所以直接上步骤,后面接代码。

1.直接从中间的元素开始找,此元素与要找的值做比较,有三种情况,相等,大于和小于,相等则记录此元素位置并返回true结束函数,大于则缩小范围,让右边界等于此元素的位置减一,小于则让左边的边界等于此元素位置加一。

2.循环此过程直到左边界大于右边界跳出,此时其中始终没有元素与要找的值相等,所以代表未找到,返回false结束函数。

代码如下:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 bool BinarySearch(int *pArray,int nCount,int *pCount,int numAnswer)
 5 {
 6      int low = 0,high = nCount-1;
 7      while(low <= high)
 8      {
 9                int middle = low + (high-low)/2;
10                if(pArray[middle] == numAnswer)
11                {
12                                  *pCount = middle+1;
13                                  return true;
14                }
15                else if(pArray[middle] > numAnswer)
16                {
17                     high = middle - 1;
18                }
19                else
20                {
21                     low = middle + 1;
22                }
23      }
24      return false;
25 }
26 int main()
27 {
28     int pArray[20],nCount,numAnswer,answerPos;
29     while(~scanf("%d",&nCount) && nCount)
30     {
31                                for(int i = 0;i<nCount;i++)
32                                {
33                                        scanf("%d",&pArray[i]);
34                                }
35                                scanf("%d",&numAnswer);
36                                if(BinarySearch(pArray,nCount,&answerPos,numAnswer))
37                                printf("answerPos:%d\n",answerPos);
38                                else 
39                                printf("The Number is Not Here!\n");
40     }
41     
42     return 0;
43 }

 

转载于:https://www.cnblogs.com/FWFC/p/6287342.html

相关文章:

  • 常识性概念
  • 如何做出健壮的系统设计
  • Docker Registry服务器部署配置
  • C++类、继承、多态、虚函数
  • ZOJ 3329 One Person Game
  • pyinstall tkinter image
  • CSS快速入门
  • 强力优化Rancher k8s中国区的使用体验
  • Windows 8 Platform (三) Windows 8 Developer Preview
  • 关于责任和业务(r11笔记第60天)
  • 如何测试网页登录
  • C#分部类型解析
  • 博为峰Java技术文章 ——JavaSE Swing JTabbedPane选项卡面板II
  • JS 设置盒子div 跳转
  • 数组操作函数总结
  • SegmentFault for Android 3.0 发布
  • cookie和session
  • css的样式优先级
  • download使用浅析
  • Druid 在有赞的实践
  • Fabric架构演变之路
  • HTTP--网络协议分层,http历史(二)
  • Java应用性能调优
  • maven工程打包jar以及java jar命令的classpath使用
  • maya建模与骨骼动画快速实现人工鱼
  • Meteor的表单提交:Form
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • storm drpc实例
  • vue2.0项目引入element-ui
  • 大主子表关联的性能优化方法
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 面试遇到的一些题
  • 排序算法之--选择排序
  • 前端代码风格自动化系列(二)之Commitlint
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 我与Jetbrains的这些年
  • 鱼骨图 - 如何绘制?
  • 在weex里面使用chart图表
  • 第二十章:异步和文件I/O.(二十三)
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • ${factoryList }后面有空格不影响
  • $refs 、$nextTic、动态组件、name的使用
  • (02)Hive SQL编译成MapReduce任务的过程
  • (13):Silverlight 2 数据与通信之WebRequest
  • (Java)【深基9.例1】选举学生会
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (力扣)1314.矩阵区域和
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (生成器)yield与(迭代器)generator
  • (一)插入排序
  • (转)linux 命令大全
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .net framework profiles /.net framework 配置