1.折半查找的定义:

在计算机中,折半查找,也称二分搜索。它是一种在有序数组中查找某一特定元素的搜索算法。

2.折半查找的实现原理: 

搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半 。

以下是折半查找和顺序遍历的算法实实现动态图

3.折半查找算法优点:

折半查找法的优点是比较次数少,查找速度快,平均性能好;

其缺点是要求待查表为有序表,且插入删除困难。

因此,折半查找方法适用于不经常变动而查找频繁的有序列表。

4.代码实现:

# include<stdio.h>
# include<string.h>
int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9,10 };//下标:0,1,2,3,4,5,6,7,8,9int k = 8;int left = 0;int sz = sizeof(arr) / sizeof(arr[0]);int right = sz - 1;while (left <= right){int mid = (left + right) / 2;if (arr[mid] > k){right = mid - 1;}else if (arr[mid] < k){left = mid + 1;}else{printf("找到了:%d\n", mid);break;}}if (left > right)//情况四:找不到{printf("找不到了\n");}return 0;
}

代码讲解:

 1.通过建立左下标left与右下标right组成一个完整的范围。

         2.创建关键查找数k,作为范围内要被查找的数字。

         3. int mid = (left + right) / 2;这句是折半查找的核心语句,作用就是计算两边元素之和除2(为中间元素)与要查找的元素做对比,进而确定查找数的范围。

         4.if (arr[mid] > k)表示情况一:求出的中间数若>要查找的数,就将右下标移位到mid的左边一位,直接消去其中一半,之后再求出左下标与更新的右下标的中间元素,更新出新的范围,再与要找元素重新进行对比。

        5.else if (arr[mid] < k)表示情况二:求出的中间数若 <要查找的数,就将左下标移位到mid的右边一位,直接消去其中一半,之后再求出左下标与更新的右下标的中间元素,更新出新的范围,再与要找元素重新进行对比。

        6.else表示情况三:若恰好相等,则直接跳出循环,printf打印输出。

        7.if (left > right)表示情况四:找不到。


函数版:优化了一下

#include<stdio.h>
#include<String.h>
int test(int arr[], int sz, int k) {int left = 0;int right = sz - 1;while (left <= right){int mid = (left + right) / 2;if (arr[mid] > k)right = mid - 1;else if (arr[mid] < k)left = mid + 1;elsereturn mid;}if (left > right)//情况四:找不到return -1;}int main() {int arr[] = { 1,2,3,4,5,6,7,8,9,10 };//下标:0,1,2,3,4,5,6,7,8,9int k = 0;scanf("%d", &k);int sz = sizeof(arr) / sizeof(arr[0]);int ret = test(arr, sz, k);if (ret == -1) {printf("未找到该元素,该元素不存在!\n");}else {printf("找到了,该元素下标处于:%d的位置", ret);}return 0;
}

C语言折半查找算法及代码实现相关推荐

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

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

  2. 职坐标陈豪java_java语言之实现折半查找算法

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

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

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

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

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

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

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

  6. 严蔚敏版数据结构(C语言版)算法实现代码

    严蔚敏版数据结构(C语言版)算法实现代码 数据结构(C语言版)代码实现 线性表 顺序表 链表 单向链表 静态链表01 静态链表02 双向循环链表 栈与队列 栈 顺序栈 进制转换 行编辑器 未完待续.. ...

  7. 【查找算法】折半查找算法

    ​ 零.写在前面 CSDN21天学习挑战赛 本人蒟蒻一枚,文章若有不足之处请大家批评指出,欢迎大家留言. 活动地址:CSDN21天学习挑战赛 文章目录 零.写在前面 一.算法是什么? 二.折半查找算法 ...

  8. <数据结构>折半查找算法实现

    文章目录 前言 一.折半查找算法(采用顺序表存储结构) 二.使用步骤 1.代码功能实现 总结 前言 提示:本篇主要是本小白大学期间对数据结构实验的一些基本代码功能实现,希望对一同数据结构的伙伴有所帮助 ...

  9. c语言程序二分法求解,C语言二分法查找算法(附带源码)

    顺序查找是从第一个数据开始比较,直到找到目标数据.当数据量较大时,顺序查找的效率就会降低. 将数据进行排序以后,我们就可以使用另一种更加有效的查找方法:二分法查找.二分法查找的思想是,对于已经按照从小 ...

最新文章

  1. python连接access 参数太少_带参数的PypyODBC:[ODBC Microsoft Access Driver]参数太少。预期4...
  2. python怎么换行输入而不执行_关于在IDLE中怎么换行继续敲写代码而不执行语句...
  3. 前端学习(2608):vuex的介绍
  4. 内网转外网方法 Sunny-Ngrok
  5. Java连接Elasticsearch6.xxx 代码高亮显示篇四
  6. 【Elasticsearch】elasticsearch 索引 详解 index
  7. hihocoder1033交错和
  8. unity改变物体轴心
  9. spring 事务案例--转账
  10. (转载)PHP环境搭建-记录
  11. mac 安装 SwitchHosts,链接都不好使了
  12. [收集编辑]管理故事216则
  13. C++ IO的简单用法
  14. 程序员的系统桌面应该是这样的
  15. c++实现三国杀小游戏
  16. 男人的最高品位在于选择女人
  17. matlab 定义函数 调用,matlab 定义函数,matlab定义函数并调用
  18. 谷歌最新的百分比布局库的示例项目
  19. C/C++陷阱与套路
  20. APP移动测试用例总结,总有你要用到的

热门文章

  1. 目标跟踪的研究现状和最新资源
  2. 【day2c/c++入门题目-这样的水仙花数你见过吗?】
  3. New bing已在名单里但是总是用不了怎么办
  4. Python数据清洗N0.2
  5. ansible 远程windows
  6. HDFS、Ceph、GFS、GPFS、Swift、Lustre
  7. python项目实训报告简介_python实验报告5
  8. 南京六合某工厂 HP ProLiant BL460c G7 RAID5 数据恢复
  9. 业务还是功能?2B产品的用户角色问题
  10. Imagenet FoW类数据集 SIFT特征