《离散数学及其应用》读书笔记-二分法
来源:互联网 发布:佣兵天下的java游戏 编辑:程序博客网 时间:2024/05/01 16:40
上一篇用递归实现二分法,十分丑陋,当时的想法焦点集中在去寻找二分的中心移动上,
这回把焦点放在两边的边界上,判断中心值与待查找目标的大小,调整两边的边界,继续判断,不断压缩搜索的空间,这样,不用构造新的数组,算法实现更加优雅
代码如下:
package org.test.algorithm;/** * 二分法搜索 * 《离散数学及其应用》P100 * @author ytdaguang_shan@126.com * @since 2012-5-18 * */public class BinarySearch { /** * 二分搜索 * 把关注点放在两端的边界上 * 根据中间元素检测的结果不断修改两边的边界位置,而不是修改中间指针的位置(这种方式的算法依赖于递归) * 得到了更优雅简洁的非递归方案 * @param numAimed 待搜索数字 * @param arrSrc 源数组 * @return 找到则返回索引,否则-1 */ public static int binarySearch(int numAimed,int[] arrSrc){ int startIndex = 0; int endIndex = arrSrc.length-1; while(startIndex<endIndex){ int middleIndex = startIndex+(endIndex-startIndex)/2; if(numAimed>arrSrc[middleIndex]){ startIndex = middleIndex+1;//+1 不断压缩搜索空间,直至首尾变成一个 }else{ endIndex = middleIndex; } } if(arrSrc[startIndex]==numAimed){ return startIndex; } return -1; } }
package org.test.algorithm;import junit.framework.TestCase;public class BinarySearchTest extends TestCase { private static int[] srcArr; public void testBinarySearch() { init(); assertEquals(3,BinarySearch.binarySearch(78, srcArr)); assertEquals(4,BinarySearch.binarySearch(900, srcArr)); assertEquals(0,BinarySearch.binarySearch(2, srcArr)); } private static void init(){ //===============准备待搜索源数组====================== srcArr = new int[]{2,34,56,78,900}; /** * random 1~10 */ int randomStep = (int)Math.random()*10; /** * 填充数组 元素整数递增,递增间隔10以内随机数 */// for(int i=0;i<srcArr.length;i++){// if(i==0){// srcArr[i] = i+randomStep;// }else{// srcArr[i] = srcArr[i-1]+randomStep;// }// } //===================================== }}
- 《离散数学及其应用》读书笔记-二分法
- 《离散数学及其应用》读书笔记【三】计数
- 《离散数学及其应用》读书笔记【一】逻辑和证明
- 《离散数学及其应用》读书笔记【二】集合 函数 数列 求和
- 离散数学及其应用 前言
- 《离散数学及其应用》学习(上)
- 《离散数学及其应用》学习(下)
- Discrete Mathematics and Its applications - 离散数学及其应用 读书笔记 ( 二 )
- Discrete Mathematics and Its applications - 离散数学及其应用 读书笔记 ( 一 )
- 《 Discrete Mathematics and its Applications 》 离散数学及其应用 读书笔记 ( 三 )
- 离散数学及其应用-学习笔记(1)
- 离散数学及其应用第一篇绪论
- 离散数学及其应用--第一章-命题逻辑的基本概念
- 【离散数学及其应用】The Fundamentals:Algorithms, the Integers, and Matrices
- 漫谈<<离散数学及其应用>> 第二章的计算机题目解答。
- 《离散数学及其应用》第六版中文版勘误表(更新中)
- 离散数学及其应用——ch1逻辑与证明
- 生成全排列----离散数学及其应用伪代码实现
- UILabel 显示多行文字
- Android传感器介绍及指南针的实现
- Fedora 12自动添加用户目录为smb共享目录
- js只能输入数字及小数点
- 关于WCF+MVC+EF 学习系列文章整理
- 《离散数学及其应用》读书笔记-二分法
- UIPickerView 实现多列选择栏
- 依赖项注入 (DI) 和控制反转 (IOC) 容器模型
- Netty之源代码解析
- 常用类型 总结
- Shell Perl Python 脚本语言介绍
- android翻书效果实现原理( 贝塞尔曲线绘制原理/点坐标计算)
- UIWebView 控制页面 字体 大小
- Finding a needle in Haystack:Facebook's photo storage的理解