折半查找
来源:互联网 发布:黄金时代知乎 编辑:程序博客网 时间:2024/06/04 20:01
思路
在有序队列中,将查找的关键字和查找范围内的中间元素进行比较,会出现如下三种情况:
1. 关键字和该中间元素相等,则查找成功。
2. 如果关键字比该中间元素大,则将整个查找范围的后半部分作为新的查找范围,重新进行折半查找算法。
3. 如果关键字比该中间元素小,则将整个查找范围的前半部分作为新的查找范围,重新进行折半查找算法。
4. 中间元素不等于关键字且查找范围小于等于1,则说明查找失败。
代码实现
#include <stdio.h>#include <stdlib.h>int binary_search(int * data, int len,int key){ int low = 0; int high = len - 1; int mid = 0; /* 判断查找范围是否大于等于0 */ while (low <= high) { /* 首先取中间值 */ mid = low + (high - low) / 2; /* 相等,则直接返回 */ if (data[mid] == key) { return mid + 1; } /* 小于则,取前半部分 */ else if (data[mid] > key) { high = mid - 1; } /* 大于则,取后半部分 */ else { low = mid + 1; } } return -1;}int main(){ int data[5] = { 10, 2, 20, 15, 16 }; int len = 5; printf("%d\n", binary_search(data, len, 20)); return 0;}
折半查找性能分析
查找算法性能的指标就两个:
- 查找成功时,平均的查找长度,折半查找平均查找长度为:((n+1)/n)*(log(n+1)-1)
- 查找失败时,需要比较的次数, 折半查找最多比较次数为:log(n)+1
注意:折半查找为有序表查找算法,它不适用于无序的顺序表和链表中。
阅读全文
0 0
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- HashTable源码简单介绍
- 设计模式中类的关系
- HDU3397-Sequence operation
- wpf实现自定义布局
- Java-判断是否为回文数
- 折半查找
- 一个操作系统的实现笔记1:环境搭建
- 第八章 拦截器机制
- 超简单CentOS7 配置阿里云yum源
- 亚马逊EC2建立虚拟机并使用ssh连接
- JS延时函数,格1秒触发
- 人们常用的HTML5前端开发框架有哪些
- 在Kotlin下使用ButterKnife框架
- Tocmat-logger4j.properties和log4j.xml的区别