java 二分法算法的实例
1、前提:二分查找的前提是需要查找的数组必须是已排序的,我们这里的实现默认为升序
2、原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的那个值)前,中值,中值后;将要查找的值和数组的中值进行比较,若小于中值则在中值前面找,若大于中值则在中值后面找,等于中值时直接返回。然后依次是一个递归过程,将前半部分或者后半部分继续分解为三部分。可能描述得不是很清楚,若是不理解可以去网上找。从描述上就可以看出这个算法适合用递归来实现,可以用递归的都可以用循环来实现。所以我们的实现分为递归和循环两种,可以根据代码来理解算法
3、实现:
代码如下
packageorg.cyxl.algorithm.search; /** * 二分查找 * @author cyxl * */ publicclassBinarySearch { privateintrCount=0; privateintlCount=0; /** * 获取递归的次数 * @return */ publicintgetrCount() { returnrCount; } /** * 获取循环的次数 * @return */ publicintgetlCount() { returnlCount; } /** * 执行递归二分查找,返回第一次出现该值的位置 * @param sortedData 已排序的数组 * @param start 开始位置 * @param end 结束位置 * @param findValue 需要找的值 * @return 值在数组中的位置,从0开始。找不到返回-1 */ publicintsearchRecursive(int[] sortedData,intstart,intend,intfindValue) { rCount++; if(start<=end) { //中间位置 intmiddle=(start+end)>>1; //相当于(start+end)/2 //中值 intmiddleValue=sortedData[middle]; if(findValue==middleValue) { //等于中值直接返回 returnmiddle; } elseif(findValue>1; //相当于(start+end)/2 //中值 intmiddleValue=sortedData[middle]; if(findValue==middleValue) { //等于中值直接返回 returnmiddle; } elseif(findValue 4、测试代码
packageorg.cyxl.algorithm.search.test; importorg.cyxl.algorithm.search.BinarySearch; importorg.junit.Test; publicclassBinarySearchTest { @Test publicvoidtestSearch() { BinarySearch bs=newBinarySearch(); int[] sortedData={1,2,3,4,5,6,6,7,8,8,9,10}; intfindValue=9; intlength=sortedData.length; intpos=bs.searchRecursive(sortedData,0, length-1, findValue); System.out.println("Recursice:"+findValue+" found in pos "+pos+";count:"+bs.getrCount()); intpos2=bs.searchLoop(sortedData, findValue); System.out.println("Loop:"+findValue+" found in pos "+pos+";count:"+bs.getlCount()); } }5、总结:这种查找方式的使用场合为已排序的数组。可以发现递归和循环的次数是一样的
忍者必须死34399账号登录版 最新版v1.0.138v2.0.72
下载勇者秘境oppo版 安卓版v1.0.5
下载忍者必须死3一加版 最新版v1.0.138v2.0.72
下载绝世仙王官方正版 最新安卓版v1.0.49
下载Goat Simulator 3手机版 安卓版v1.0.8.2
Goat Simulator 3手机版是一个非常有趣的模拟游
Goat Simulator 3国际服 安卓版v1.0.8.2
Goat Simulator 3国际版是一个非常有趣的山羊模
烟花燃放模拟器中文版 2025最新版v1.0
烟花燃放模拟器是款仿真的烟花绽放模拟器类型单机小游戏,全方位
我的世界动漫世界 手机版v友y整合
我的世界动漫世界模组整合包是一款加入了动漫元素的素材整合包,
我的世界贝爷生存整合包 最新版v隔壁老王
我的世界MITE贝爷生存整合包是一款根据原版MC制作的魔改整