数据结构-顺序查找的二分查找法(折半查找)
折半查找要求顺序表中的元素必须是排好序的,即数组中的元素是由小到大排好序的
思想:
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);
}
数据结构-顺序查找的二分查找法(折半查找)相关推荐
- 数据结构50:二分查找法(折半查找法)
折半查找,也称二分查找,在某些情况下相比于顺序查找,使用折半查找算法的效率更高.但是该算法的使用的前提是静态查找表中的数据必须是有序的. 例如,在{5,21,13,19,37,75,56,64,88 ...
- php折半查找算法,PHP如何实现折半查找算法
本文主要介绍了PHP实现的折半查找算法,简单描述了折半查找的原理,并结合实例形式分析了php采用递归与非递归方式实现折半查找算法的相关操作技巧,需要的朋友可以参考下,希望能帮助到大家. 定义:折半查找 ...
- java实现折半查找_java语言之实现折半查找算法
本文主要向大家介绍了java语言之实现折半查找算法,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 折半查找(Binary Search)又称为二分查找,其要求数据序列呈线性结构,也就 ...
- 二分排序法(折半插入法)
二分排序法貌似是第一次听说,在wangsifu2009的博客上看到. 以前只听说过堆排序.快排序.希尔排序.选择.插入.冒泡排序,于是在网上搜索了一下,其代码实现是这样的: #include < ...
- java 二分法查找排序,插入排序,折半查找算法
import java.util.*; /* *二分法排序和插入 */ class Main21 { public static void main(String[] args) { int[] ar ...
- c语言指针的折半法查找,数据结构笔记7:折半查找法(二分查找法)及C语言实现...
折半查找,也称二分查找,在某些情况下相比于顺序查找,使用折半查找算法的效率更高.但是该算法的使用的前提是静态查找表中的数据必须是有序的. 折半查找算法 对静态查找表{5,13,19,21,37,56, ...
- c语言实验报告 折半查找法,C语言数组之冒泡排序+折半查找法(二分查找)
冒泡排序算法 将相邻的元素进行两两比较,大的向后"冒", 小的向前"赶". 口诀: N个数字来排队,两两比较小靠前 外层循环N-1(控制需要比较的轮数). 内层 ...
- C语言数据结构顺序表的顺序查找和折半查找的功能
C语言顺序表顺序查找和折半查找的基本思想和应用 顺序查找算法:又称为线性查找,主要用在-线性表-中进行查找 通常分为:1-无序线性表的一般查找: 2-对关键字有序的顺序表查找: 优缺点分析: 缺点:当 ...
- 数据结构与算法(8-2)有序表查找(折半查找(二分查找)、插值查找)
目录 一.折半查找(二分查找) 二.插值查找 总代码 一.折半查找(二分查找) 原理:一次次折半,不断向着查找值的位置靠近 . 适用场景:有序(必须) 流程:开始时,min标志首,max标志尾,med ...
- 408数据结构学习笔记——顺序查找、折半查找、分块查找
目录 1.顺序查找 1.1.顺序查找的概念 1.2.顺序查找的代码 1.3.顺序查找的查找效率 1.4.顺序查找的优化 1.5.顺序表的时间复杂度 2.折半查找 2.1.折半查找的概念 2.2.折半查 ...
最新文章
- android监控来电显示
- linux中的读目录,在linux中读取目录内容
- Django 序列化三种方式 对象 列表 元组
- kylin如何支持flink_Kylin 在腾讯的平台化及 Flink 引擎实践
- Exynos4412裸机开发 —— UART
- 2015毕业找工作纪实|一年的蜕变毕业生
- OCR识别之图像预处理
- drupal7 node.tpl.php,使用Drupal 7在custom - node.tpl.php中顯示CCK字段(無格式化)
- Fresco对Listview等快速滑动时停止加载
- RportViewer(20121023) 参数引起的异常
- c++输入回车结束循环,C++ cin如何输入回车停止
- 使用Android Studio向SVN上传新项目
- Log4j.properties配置文件详解
- 将lena图片进行简单处理
- 分享|对流层延迟、电离层延迟、重力数据下载方式
- WIN10进不了BIOS的解决办法
- Java基础语法之变量、运算符、流程控制、数组和方法等基础语法
- 【Excel】给Excel生成工作表目录
- VMware虚拟机没有网
- Scrapy中对xpath使用re