即对于一个给定的数a,和整数b1,b2····bn,其中b1,b2····bn已经预先排序并在内存中,我们要返回当a=bi时的下标i,但是如果a不在数据之中的话就返回-1.

如果我们只针对于解题的话,有一个很容易想到的解法,那就是我们可以从左向右的扫描数据并且判断是否有a=bi,代码的实现如下

int search(int* nums, int target, int numsSize) {for (int i = 0; i < numsSize; i++) {if (nums[i] == target) return i;}return -1;
}

其运行话费线性时间,并且该算法并没有使用到已经排序。

接下来介绍对分查找法:首先代码如下

int search(int* nums, int target, int numsSize) {int i = 0;int high = numsSize - 1;int mid = (i + high) / 2;while (i<=high) {if (nums[mid] > target) {high = mid - 1;}else if (nums[mid] < target) {i = mid + 1;}else return mid;mid = (i + high) / 2;}return -1;
}

该代码的基本思想就是不断地缩小范围直到找到答案

对分查找(二分查找、折半查找)相关推荐

  1. C语言之二分查找法或折半查找法剖析(经典例题,经典解析)

    二分查找法(也叫折半查找法): 什么是二分查找? 具体查找的方式? 两种方法剖析 易错点列举 先举例题: int arr[]={1,2,3,4,5,6,7,8,9,10}; 找出7所在的位置. 分析之 ...

  2. 二分查找算法(折半查找算法)

    二分查找算法(折半查找算法) 二分查找又称折半查找.二分搜索.折半搜索等,是在分治算法基础上设计出来的查找算法,对应的时间复杂度为O(logn). 二分查找算法仅适用于有序序列,它只能用在升序序列或者 ...

  3. 查找算法:折半查找算法实现及分析

    折半查找算法介绍 折半查找(Binary Search)又称为二分查找.它的前提是线性表中的记录必须是关键码有序(通常从小到大有序),线性表必须采用顺序存储.从算法名称可以看出算法的思路,先取有序序列 ...

  4. 数据结构之查找算法:折半查找

    查找算法:折半查找 思维导图: 算法思想: 代码实现: 判定树: 折半查找判定树的构造: 顺序查找与折半查找对比: 思维导图: 算法思想: 代码实现: typedef struct {int *ele ...

  5. 对分查找法(二分查找法,折半查找法)

    二分查找法是针对已经排好序的序列进行查找 每次折半查找 算法时间复杂度,对于长度为N的序列,每次执行N/2,假设k次结束,最后到第一个N/2^k=0,所以k=logN 时间复杂度logN int bi ...

  6. 数据结构-顺序查找的二分查找法(折半查找)

    折半查找要求顺序表中的元素必须是排好序的,即数组中的元素是由小到大排好序的 思想: 1.以数组的边界确定low和high的值,low就是最低的0,high就是最高的n-1(n是元素的个数),这里的lo ...

  7. 数据结构 查找 静态查找表算法 折半查找 二叉排序树查找算法 实验报告

    实验内容: 基本内容: 算法1:采用顺序存储结构创建静态查找表,对查找表进行顺序查找和改进的顺序查找,并对其查找效率进行比较: 算法2:采用顺序存储结构创建静态查找表--有序表,对有序表进行二分查找: ...

  8. 查找——1、折半查找法

    1.折半查找又称为二分查找,是一种效率较高的查找方法. 2.折半查找的前提条件: 查找表中的所有记录是按关键字有序(升序或降序) . 查找过程中,先确定待查找记录在表中的范围,然后逐步缩小范围(每次将 ...

  9. python123第k序元素查找_Python实现折半查找并用matplotlib实现动态过程可视化

    折半查找是算法中减治策略的基本例子,实现起来也很简单,但是在网上看到的图片教程不觉得很乾巴麽?? 在这里插入图片描述 这是一个简单的实现: def Reduction(lists, k): " ...

  10. java折半查找简述_折半查找(java版)

    package com.yuan.alg; /** * @author yuan *这个程序是演示折半查找的例子. *该算法是用递归实现的. *前提条件是该数组必须是有序的. */ public cl ...

最新文章

  1. 分享一款超棒的jQuery旋钮插件 - jQuery knob
  2. [概念型] 区块链包含术语概念【27术语整理汇总】
  3. 专访 | 德国大神Hans Uszkoreit:语言才是AI的关键,深度学习无法解决NLP的核心问题...
  4. 线性时间冰山查询算法(Linear-time Iceberg Query Algorithm )
  5. 笔记-中项案例题-2020年下-质量管理
  6. 认知行为技术是计算机技术吗,基于认知行为模型的多Agent建模技术研究与应用_问答库...
  7. Quick BI产品核心功能大图(五)移动端:让数据在更多业务场景中流通
  8. TypeScript - Interfaces
  9. Com/ATL编程 一些学习链接
  10. 浙大 计算机 毕业论文格式,浙大硕士毕业论文格式
  11. 超级好用的电脑截图翻译软件你值得拥有!
  12. BLAST原理和用法总结(二)
  13. linux 杂项设备,浅谈 MISC杂项设备
  14. 鸿蒙初开再往前是什么,鸿蒙初开造句,用鸿蒙写一句话
  15. wps纸张大小设置成A4_A4纸是最广泛的打印纸,隐藏了什么秘密?
  16. JS 通过百度地图获取详细地址及经纬度
  17. 非机动车检测,电动车自行车检测
  18. 汉诺塔游戏(java)
  19. 2020上海国际电力电工展——安科瑞参展产品提前剧透
  20. 20180511-Allegro16.6 NC Drill和Optimize drill head travel的关系

热门文章

  1. 历史上的今天:万维网面世 30 周年;微信公众平台正式上线;计算机先驱诞生日...
  2. 【Drools规则引擎】基础入门案例五(Kie-Server+WorkBench)
  3. 网络安全 Kali web安全 基于SMB协议收集信息
  4. CSS新增的属性、结构伪类选择器,帮你快速找到那个对的人
  5. python后端与C# WinForm前端连接之Flask使用
  6. 我们是怎样毁了社交网站的?
  7. 忍者必须死3 通关 服务器维护,忍者必须死38月29日停服维护了什么 忍者必须死38月29日停服维护公告_游戏堡...
  8. HTML+CSS完成毛玻璃发光按钮的制作
  9. Go语言学习笔记——结构体中使用tag标记
  10. 【Vue】Vue的过渡动画