java算法之折半查找
来源:互联网 发布:爱拍软件 编辑:程序博客网 时间:2024/06/01 10:00
折半查找又称二分查找,优点:查询次数比较少,查找速度快,平均性能好。缺点:要求待查表为有序表,且插入困难,因此折半查找适用于不经常变动而查找频繁的有序列表。
基本思想:将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法终止;
如果x< a[n/2],则只要在数组a的左半部分继续搜索,如果x>a[n/2],则只要在数组a的右半部分搜素。
演示过程:设要查找的数为36 num=36
假设数组为:a[1,5,10,20,25,35,38]
step1: int low=0 high = a.length-1
注:
low:数组中第一个元素的下角标
high:数组中最后一个元素的下脚标
mid:中间值
int mid = (low+high)/2 = (0+6)/2 = 3
a[mid] = a[3] = 20
因为 num>a[mid]
所以 low=mid+1=4 high=6
step2: mid=(4+6)/2=5
a[mid] = a[5] = 35;
因为: num>a[mid]
所以:low = mid+1 high=6
step3: mid = (low+high)/2=6
a[mid] = a[6] = 38
因为: num< a[mid]
所以:low=6 high = mid-1 = 5
因为: low>high
所以没找到。
注:low必须小于等于high
折半查找算法如下:
public static void main(String[] args){ int[] a = {1,10,15,25,35,50}; Scanner scanner= new Scanner(System.in); System.out.println("请输入要查找的数:"); int num = scanner.nextInt(); //定义数组第一个元素下脚标 int low =0; //最后一个元素的下角标 int high = a.length-1; while (low<=high){ int mid = (low+high)/2; if(num == a[mid]){ System.out.println("找到了"); }else if(num>a[mid]){ low = mid+1; }else if(num<a[mid]){ high = mid -1; } } if(low>high){ System.out.println("数组中不存在此元素"); } }
阅读全文
0 0
- java算法之折半查找
- java算法之折半查找
- java核心技术之折半查找算法
- java折半查找算法
- 查找算法之折半查找
- 查找算法之折半查找
- 查找算法之折半查找
- 查找算法之折半查找
- 【查找算法】之折半查找
- JAVA算法之 二分查找法<又称折半查找>
- 经典算法之折半查找
- 算法学习之折半查找
- 数据算法之折半查找(binSearch)的Java实现
- 基础算法之五-查找: 折半查找
- 数据结构查找算法之折半查找
- Java之折半查找数据
- 查找算法之折半搜索算法
- IOS算法(五)之折半查找
- UCLA 做可定制计算的三个层次
- 循环结构
- String常用类
- 解决应用服务器集群后的Session问题
- scrapy Middleware
- java算法之折半查找
- 建立有向图的邻接表,深度优先遍历和广度优先遍历的递归与非递归算法,判断是否是有向无环图,并输出一种拓扑序列
- 【备忘】Java菜鸟到大牛学习路线之高级篇
- Object-to-Primitive Conversions in JavaScript
- Metropolis-Hasting 算法和 Gibbs sampling 算法
- git 命令行
- NFS文件系统启动
- C++对文件进行读写操作
- HDU 2203 亲和串(KMP)