二分查找(Java)
2024-10-14 09:26:10
二分查找的前提的要查找的数组必须有序.
代码如下:
程序1
public class source { public int binary_sort(int[] array, int item) {
int len = array.length;
int min = 0; //定义查找范围的开始
int max = len - 1; //定义查找范围的结尾
while(max > min) { //这里不能等于,不然可能死循环
if(array[min+(max-min)/2] == item) {
return (int)min+(max-min)/2;
}
else if(array[min+(max-min)/2] > item) {
max = min+(max-min)/2;
}
else if(array[min+(max-min)/2] < item) {
min = min+(max-min)/2;
}
}
return -1;
} public static void main(String[] args) {
int[] a = {1,2,3,4,5,6,7,8,9,10};
int n = -1;
source sou = new source();
System.out.println(sou.binary_sort(a, n));
}
}
程序复制下来就可以正常执行,这是自己看了原理后写的代码,网上找了例子,也贴上来对比一下
程序2
int binary_sort(int array[], int length, int value)
{
if(NULL == array || == length)
return -; int start = ;
int end = length -; while(start <= end){ int middle = start + ((end - start) >> );
if(value == array[middle])
return middle;
else if(value > array[middle]){
start = middle + ;
}else{
end = middle -;
}
} return -;
}
和别人的代码对比发现自己代码的问题:
1.复杂表达式变量应该定义成变量.
2.程序1中开始没有是max = len,没有减一,数组下标问题要注意.同理下面的两句代码.
3.程序2计算平均值没有直接除以2,而是(end - start) >> 1,用了移位操作,这样避免产生小数,而且不用强制类型转换.
最新文章
- 渗透测试工具BurpSuite做网站的安全测试(基础版)
- 01 HDFS 简介
- 如何用python在Windows系统下,生成UNIX格式文件
- bzoj 3163: [Heoi2013]Eden的新背包问题
- 每日学习总结<;一>; 2015-8-31
- Maven学习总结
- 打造 PHP版本 1password
- 【原】使用SQLite打开本地*.db文件
- HW4.13
- Java软件系统功能设计实战训练视频教程
- 从PM到非洲酋长,得人心者得天下
- The way to unwind the stack on Linux EABI
- Java内存管理-JVM内存模型以及JDK7和JDK8内存模型对比总结(三)
- myEclipse异常:Subversion Native Library Not Available
- How to compute f1 score for each epoch in Keras
- java运行cmd命令
- windows使用
- oracle 、mysql、 sql server使用记录
- JavaScript JSON 数据处理
- 【刷题】BZOJ 3930 [CQOI2015]选数
热门文章
- uva 825 - Walking on the Safe Side(dp)
- uva 10003 Cutting Sticks (区间dp)
- 新浪微博布局学习——妙用TabHost
- Selector、shape详解,注意这两种图像资源都以XML方式存放在drawable不带分辨率的文件夹中
- Android ROM 制作教程
- Sicily 4495. Print permutations
- 用ADB(Android Debug Bridge)实时监测Android程序的运行
- linux性能监控三张图
- SQL server 和Oracle 序列
- BZOJ 1509: [NOI2003]逃学的小孩( 树形dp )