折半查找的手工过程:

1.我需要查找的数是10;

给定:1  5  8  10  13 14  17  22  25  27  29  31  35  37  40  42  45  47  50  51  58

下标:0  1  2   3   4    5    6    7     8    9   10  11  12  13  14  15  16  17  18  19  20

   h               m                  t

   h    m          t

   h m  t

     h   t

     m  h

       m

这个手工过程到head = tail 时找到了。

我需要查找的数是29;

给定:1  5  8  10  13 14  17  22  25  27  29  31  35  37  40  42  45  47  50  51  58

下标:0  1  2   3   4    5    6    7     8    9   10  11  12  13  14  15  16  17  18  19  20

   h               m                  t

这个手工过程数在head < tail时程序停止,找到的是下标的那个数。

代码如下:

#include<stdio.h>
#include<stdlib.h>
int binarySearch(int *arr,int count ,int data){int middle;int head = 0;int tail;tail =  count;while(arr[middle] != data){middle = (head + tail)/ 2;if(arr[middle] < data){head = middle + 1;}else if(arr[middle] > data){tail = middle - 1;}}    return middle;return -1;
}
int main(){int n = 0;int m ;int a[10]={1,4,8,9,16,17,19,20,25,27};printf("请输入需要查找的数: ");scanf("%d",&n);m = binarySearch(a,10,n);printf("%d ",m);return 0;
}

这是一个简单的折半处理,用的是一个简单的数组

需要强调的是:

      如果要运用折半算法,数必须是有序的(升序或者降序)

      很多人都认为while(head > tail)这样也是正确的,但是对于middle = data时条件一直成立就会出现问题的!

转载于:https://www.cnblogs.com/youdiaodaxue16/p/9016337.html

折半查找算法及分析(手工过程)相关推荐

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

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

  2. php折半查找算法,PHP如何实现折半查找算法

    本文主要介绍了PHP实现的折半查找算法,简单描述了折半查找的原理,并结合实例形式分析了php采用递归与非递归方式实现折半查找算法的相关操作技巧,需要的朋友可以参考下,希望能帮助到大家. 定义:折半查找 ...

  3. java 用折半查找,java折半查找算法

    //当 low>high 时表示查找区间为空,查找失败 } Java 代码: /** * 二分查找算法 * * @param srcArray 有序数组 * @param target 被查找的 ...

  4. C语言折半查找算法及代码实现

    1.折半查找的定义: 在计算机中,折半查找,也称二分搜索.它是一种在有序数组中查找某一特定元素的搜索算法. 2.折半查找的实现原理:  搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则 ...

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

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

  6. php折半查找算法,php二分法查找(也叫折半查找)算法 (数组必须是从小到大的)

    //php二分法查找(也叫折半查找)算法/ 数组必须是从小到大的 $abs=array(1,12,13,114,115,116,117,118); //z查找数组的最大下标 $hight = coun ...

  7. 修改折半查找算法进行范围查找

    /*************************************** *修改折半查找算法进行范围查找  ***************************************/ # ...

  8. java 二分法查找排序,插入排序,折半查找算法

    import java.util.*; /* *二分法排序和插入 */ class Main21 { public static void main(String[] args) { int[] ar ...

  9. java实现折半查找_java语言之实现折半查找算法

    本文主要向大家介绍了java语言之实现折半查找算法,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 折半查找(Binary Search)又称为二分查找,其要求数据序列呈线性结构,也就 ...

最新文章

  1. Js打印表格时部分边框不显示(table 标签)
  2. Server-Side UI Automation Provider - WinForm Sample
  3. WinCE系统声音定制
  4. java语言cd_java语言
  5. js 将input、textarea、Select等控件替换成标签(span)
  6. RobotStudio双传送带系统的搭建
  7. SNF开发平台WinForm之十二-发送手机短信功能调用-金笛-SNF快速开发平台3.3-Spring.Net.Framework...
  8. Mysql BLOB和TEXT类型
  9. 算法:Sliding Window Maximum(滑动窗口最大值)
  10. GitHub使用教程-官网指南
  11. QT界面添加背景图片
  12. python金融反欺诈-项目实战
  13. 安卓比较好的数独软件_有没有比较好的数独游戏APP?
  14. 矩阵标准型的系数是特征值吗_矩阵分解术,不得不从高斯说起
  15. 2017美国数学建模ICM D题 优化机场安全的乘客吞吐量检查点(Optimizing the Passenger Throughput at an Airport Security Checkpo)
  16. 如何对List去重,含Java8写法
  17. 倡议书格式范文_写倡议书的格式及范文
  18. 【iOS】Sign in with Apple
  19. 我的第一篇文章——stm32的ADC+DMA+滤波算法
  20. NAS入门之——My Cloud EX2+未入网的路由器局域网组网

热门文章

  1. Ubuntu18.04 安装搜狗输入法后无法启动的问题
  2. iOS安装CocoaPods的详细步骤
  3. Bzoj2694/Bzoj4659:莫比乌斯反演
  4. sikuli 搜索例子
  5. DELPHI跨平台的临界替代者
  6. 2015.7.11js-10(无缝滚动)
  7. 封装js千分位加逗号和删除逗号
  8. Union-SQL Server学习笔记
  9. 智能提示和那些值得崇拜的人
  10. spring el表达式 if else_Spring 获取单例流程(二)