二分查找
来源:互联网 发布:网易 魔兽对战平台 mac 编辑:程序博客网 时间:2024/05/17 22:12
二分查找的过程(成功案例)
下面的图来源于 中国大学mooc-浙大数据结构
要找的数比中间值大,往右找
还是大,继续往左
left=mid(10)+ 1 //11
right = 13不变
mid=(left+right)/2
下面是找不到数据的案例
当left>right时,说明找不到数据
比中间值小,往左
比中间值大,往右
比中间值小,往左
最后left>right 越界了,说明找不到数据
最后上代码:
package 数据结构;public class binarySearch{/* * 二分查找的前提:查找数据源必须是有序的!!! */private int [] arr ;private int left ;//记录数组左边的下标private int mid ;//记录left->right范围的中间值,此下标所对应的值就是当前要比较的值private int right ;//记录数组右边的下标(left--->right 确定查找的范围)public binarySearch ( int [] arr ) {//从外界接受一个数组this.arr = arr ;//确定初次查找时的范围left = 0 ;right = arr.length - 1;//arr.length 表示数组长度,而并非数组下标所以-1}//二分查找public int search ( int data ){while ( left <= right ){mid = (left + right) / 2 ;//计算中间元素的坐标 //如果中间值比要查找的数据小,说明要找的数据在数组的右边if ( arr [mid] < data ){left = mid + 1 ;}//如果中间值比要找的数据大,说明要找的数据在数组的左边else if ( arr [mid] > data ){right = mid - 1 ;}//查找成功else{//返回要找的数据所对应的数组下标return mid ;}}//跳出循环说明right比left小,越界了就没找到return -1 ;}//遍历public void display (){for ( int i = 0 ; i < arr.length ; ++ i ){System.out.print ( arr[i] + " ");}System.out.println ();//换行}}
阅读全文
1 0
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 第十二周 ——“最小生成树的克鲁斯卡尔算法”
- 740. Delete and Earn
- CodeForces
- 只有21行的拼写检查器
- STL 容器区别:vector、list、deque、set、map的底层实现
- 二分查找
- Lasso Regression
- ${0##*/} ${0#*/} ${0%/*} ${0%%/*}
- springBoot集成MongoDB
- 第十四周 项目一 验证算法 1.
- shiro学习(一)---认证入门程序
- C++的深拷贝与浅拷贝
- 小甲的数据爬虫与人工智能直播
- 程序员女神跟你聊聊比特币与区块链