二分查算法(递归与非递归两种方式)

⼆分查算法(递归与⾮递归两种⽅式)
⾸先说说⼆分查法。
⼆分查法是对⼀组有序的数字中进⾏查,传递相应的数据,进⾏⽐较查到与原数据相同的数据,查到了返回1,失败返回对应的数组下标。
采⽤⾮递归⽅式完成⼆分查法。代码如下所⽰。
[java]
1.    /*
2.      * ⾮递归⼆分查算法
3.      * 参数:整型数组,需要⽐较的数.
4.      */
5.    public static int binarySearch(Integer[]srcArray,int des){
6.        //第⼀个位置.
7.        int low=0;
春天的童话
8.        //最⾼位置.数组长度-1,因为下标是从0开始的.
9.        int high=srcArray.length-1;
10.        //当low"指针"和high不重复的时候.
11.        while(low<=high){
12.            //中间位置计算,low+ 最⾼位置减去最低位置,右移⼀位,相当于除2.也可以⽤(high+low)/2
汉尼拔前传
13.            int middle=low+((high-low)>>1);
14.        //与最中间的数字进⾏判断,是否相等,相等的话就返回对应的数组下标.
15.        if(des==srcArray[middle]){
16.            return middle;
17.        //如果⼩于的话则移动最⾼层的"指针"
18.        }else if(des<srcArray[middle]){
红外光通信装置19.            high=middle-1;
20.        //移动最低的"指针"
21.        }else{
22.            low=middle+1;
23.            }
24.        }
25.        return-1;
26.        }
27.
28. }
采⽤递归⽅式完成⼆分查算法。代码如下所⽰。
[java]
1. /**
2.  * 递归⽅法实现⼆分查法.
3.  * @param Array数组
4.  * @param low 数组第⼀位置
5.  * @param high 最⾼
vist6.  * @param key 要查的值.
7.  * @return 返回值.
8.  */
钋-2109. int BinSearch(int Array[],int low,int high,int key)
奥克洛铀矿
10. {
11.    if (low<=high)
12.    {
13.        int mid = (low+high)/2;
14.        if(key == Array[mid])
15.            return mid;
16.        else if(key<Array[mid])
17.            //移动low和high
18.            return BinSearch(Array,low,mid-1,key);
19.        else if(key>Array[mid])
20.            return BinSearch(Array,mid+1,high,key);
21.    }
22.    else
23.        return -1;
24. }
递归思想会被经常⽤到,更加突出了编程解决问题的⾼效。

本文发布于:2024-09-22 18:13:50,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/397797.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:查找   数组   位置   返回   递归
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议