这期内容当中小编将会给大家带来有关利用Java人实现一个二分法查找功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
假如有一组数为3,12日,24日,36岁,55岁,68年,75年,88年要查给定的值24。可设三个变量方面,中期,最终分别指向数据的上界,中间和下界,中期=(前+)/2。
开始令前=0(指向3),结束=7(指向88),则中期=3(指向36)。因为mid> x,故应在前半段中查找。
令新的结束=mid-1=2,而前面=0不变,则新的中期=1。此时x>中期,故确定应在后半段中查找。
令新的面前=中期+ 1=2,而结束=2不变,则新的中期=2,此时(中期)=x,查找成功。如果要查找的数不是数列中的数,例如x=25,当第三次判断时,x>(中期),按以上规律、令=中期+ 1,即=3,前面出现front>最后的情况,
表示查找不成功。
例:在有序的有N个元素的数组中查找用户输进去的数据x。算法如下:
1。确定查找范围前=0,结束=N - 1,计算中项中期=(前+结束)/2 .
2 .若[中]=x或front>=结束,则结束查找;否,则向下继续。
3。若(中期)& lt; x,说明待查找的元素值只可能在比中项元素大的范围内,则把中期+ 1的值赋给前面,并重新计算,中期转去执行步骤2;若一(中期)在x,说明待查找的元素值只可能在比中项元素小的范围内,则把mid-1的值赋给结束,并重新计算,中期转去执行步骤2只
<强>时间复杂度强>
1。最坏情况查找最后一个元素(或者第一个元素)主定理T (N)=T (N/2) + O(1)所以T (N)=O (logn)
2。最好情况查找中间元素O(1)查找的元素即为中间元素(奇数长度数列的正中间,偶数长度数列的中间靠左的元素)
<强>空间复杂度:强>
S (N)=N
包com.bjpowernode.test; 公开课BinarySearch {//查找次数 静态int数;/* * * @param arg游戏 */公共静态void main (String [] args) {//TODO自动生成方法存根 int[]数组={1,2,3,4,5,6,7,8,9,10}; system . out。println (searchRecursive(数组,0,数组。长度- 1,9)); System.out.println(数); 数=0; system . out。println (searchLoop(数组、9)); System.out.println(数); }/* * *执行递归二分查找,返回第一次出现该值的位置 * * @param数组 *已排序的数组 * @param开始 *开始位置 * @param结束 *结束位置 * @param findValue *需要找的值 * @return值在数组中的位置,从0开始。找不到返回1 */公共静态int searchRecursive (int[]数组,int, int, int findValue) {//如果数组为空,直接返回1,即查找失败 如果(数组==null) { 返回1; } 数+ +; 如果(开始& lt;=结束){//中间位置 int中间=(开始+结束)/1;//中值 int middleValue=https://www.yisu.com/zixun/array(中间); 如果(findValue==middleValue) {//等于中值直接返回 返回中间; }else if (findValue上述就是小编为大家分享的利用Java人实现一个二分法查找功能了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。
利用Java人实现一个二分法查找功能