折半查找要求顺序表中的元素必须是排好序的,即数组中的元素是由小到大排好序的
思想:
1.以数组的边界确定low和high的值,low就是最低的0,high就是最高的n-1(n是元素的个数),这里的low和high都是指向数组的下标(物理序号)
2.用low和high确定mid即所有元素的中间值,mid也是数组的下标,mid = (low+high)/2
3.如果mid下标的值等于关键字key那么就返回mid+1(逻辑序号)
4.如果关键字key大于mid下标的值,那么 low = mid+1 (要在mid的右侧找)
5.如果关键字key小于mid下标的值,那么 high = mid-1(要在mid的左侧找)
6.重新计算mid的值,进行二分查找,循环下去,如果找到放回mid+1,否则返回0

普通c语言代码:

#include<stdio.h>
int search(int array[], int n, int key) {int low = 0,high = n-1,mid;while(low<=high) {mid = (low+high)/2;//这里一定要注意,如果你不加括号的话,就会出现部分数据测试失败的情况if(key == array[mid]) {return mid+1;}if(key<array[mid]) {high = mid-1;}else {low = mid+1;}}return 0;
}void main() {int array[5] = {1,2,3,7,9};int n = 5;int result = search(array,n,9);printf("%d",result);
}

数据结构算法:

#include<stdio.h>//顺序表
typedef struct {int key;
}RecType;int search(RecType array[], int n, int key) {int low = 0,high = n-1,mid;while(low<=high) {mid = (low+high)/2;//这里一定要注意,如果你不加括号的话,就会出现部分数据测试失败的情况if(key == array[mid].key) {return mid+1;}if(key<array[mid].key) {high = mid-1;}else {low = mid+1;}}return 0;
}void main() {RecType array[5] = {{1},{2},{3},{7},{9}};int n = 5;int result = search(array,n,9);printf("%d",result);
}

数据结构-顺序查找的二分查找法(折半查找)相关推荐

  1. 数据结构50:二分查找法(折半查找法)

    折半查找,也称二分查找,在某些情况下相比于顺序查找,使用折半查找算法的效率更高.但是该算法的使用的前提是静态查找表中的数据必须是有序的. 例如,在{5,21,13,19,37,75,56,64,88 ...

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

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

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

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

  4. 二分排序法(折半插入法)

    二分排序法貌似是第一次听说,在wangsifu2009的博客上看到. 以前只听说过堆排序.快排序.希尔排序.选择.插入.冒泡排序,于是在网上搜索了一下,其代码实现是这样的: #include < ...

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

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

  6. c语言指针的折半法查找,数据结构笔记7:折半查找法(二分查找法)及C语言实现...

    折半查找,也称二分查找,在某些情况下相比于顺序查找,使用折半查找算法的效率更高.但是该算法的使用的前提是静态查找表中的数据必须是有序的. 折半查找算法 对静态查找表{5,13,19,21,37,56, ...

  7. c语言实验报告 折半查找法,C语言数组之冒泡排序+折半查找法(二分查找)

    冒泡排序算法 将相邻的元素进行两两比较,大的向后"冒", 小的向前"赶". 口诀: N个数字来排队,两两比较小靠前 外层循环N-1(控制需要比较的轮数). 内层 ...

  8. C语言数据结构顺序表的顺序查找和折半查找的功能

    C语言顺序表顺序查找和折半查找的基本思想和应用 顺序查找算法:又称为线性查找,主要用在-线性表-中进行查找 通常分为:1-无序线性表的一般查找: 2-对关键字有序的顺序表查找: 优缺点分析: 缺点:当 ...

  9. 数据结构与算法(8-2)有序表查找(折半查找(二分查找)、插值查找)

    目录 一.折半查找(二分查找) 二.插值查找 总代码 一.折半查找(二分查找) 原理:一次次折半,不断向着查找值的位置靠近 . 适用场景:有序(必须) 流程:开始时,min标志首,max标志尾,med ...

  10. 408数据结构学习笔记——顺序查找、折半查找、分块查找

    目录 1.顺序查找 1.1.顺序查找的概念 1.2.顺序查找的代码 1.3.顺序查找的查找效率 1.4.顺序查找的优化 1.5.顺序表的时间复杂度 2.折半查找 2.1.折半查找的概念 2.2.折半查 ...

最新文章

  1. android监控来电显示
  2. linux中的读目录,在linux中读取目录内容
  3. Django 序列化三种方式 对象 列表 元组
  4. kylin如何支持flink_Kylin 在腾讯的平台化及 Flink 引擎实践
  5. Exynos4412裸机开发 —— UART
  6. 2015毕业找工作纪实|一年的蜕变毕业生
  7. OCR识别之图像预处理
  8. drupal7 node.tpl.php,使用Drupal 7在custom - node.tpl.php中顯示CCK字段(無格式化)
  9. Fresco对Listview等快速滑动时停止加载
  10. RportViewer(20121023) 参数引起的异常
  11. c++输入回车结束循环,C++ cin如何输入回车停止
  12. 使用Android Studio向SVN上传新项目
  13. Log4j.properties配置文件详解
  14. 将lena图片进行简单处理
  15. 分享|对流层延迟、电离层延迟、重力数据下载方式
  16. WIN10进不了BIOS的解决办法
  17. Java基础语法之变量、运算符、流程控制、数组和方法等基础语法
  18. 【Excel】给Excel生成工作表目录
  19. VMware虚拟机没有网
  20. Scrapy中对xpath使用re

热门文章

  1. Qt串口通信类Posix_QextserialPort中flush()函数修正
  2. Javascript在页面加载时的执行顺序
  3. 深度神经网络的分布式训练概述:常用方法和技巧全面总结
  4. 使用ffmpeg对视频进行TS切片
  5. js中Blob对象一般用法
  6. linux命令之查看当前shell环境变量-env
  7. C++对中文字符的处理
  8. 论文笔记:PPFNet
  9. Linux软件安装常用方法
  10. 用SQL语句添加删除修改字段、一些表与字段的基本操作、数据库备份等