资讯专栏INFORMATION COLUMN

二分法的简单实现-------递归和非递归

tanglijun / 2064人阅读

摘要:写二分法时需要判断循环何时终止,如果每次都是,,会导致循环无法终止,所以此处用了。递归实现二分法目标数组,目标值,左边界,右边界输入的数组是

//非递归实现二分法

</>复制代码

  1. public class Jianzhi{
  2. public static void main (String[] args){
  3. int[] num = {1,2,3,4,5,100};
  4. int m = find(num , 5) ;
  5. System.out.println(m);
  6. }
  7. public static int find(int[] list , int m ){
  8. if(list == null ){
  9. System.out.println("输入的数组长度出错。") ;
  10. }else if(list.length ==1 ){ //如果传入的数组只有一个数字
  11. int n = list[0]==m?0:-1 ;
  12. return n ;
  13. }else {
  14. int left = 0 ;
  15. int right = list.length-1 ;
  16. while(left <= right){
  17. int mid = (left + right)/ 2 ;
  18. if(list[mid]==m){
  19. return mid ;
  20. }else if (list[mid]m){
  21. right = mid - 1 ;
  22. }
  23. }
  24. System.out.println("未在数组中找到数字"+m);
  25. }
  26. return -1 ;
  27. }
  28. }

//注意: 1.需要把mid放入循环中,不能放在循环体外,因为每次都要把mid赋值给left或者right如果放在外面每次赋值的数都一样会死循环。
// 2.写二分法时需要判断循环何时终止,如果每次都是left=mid,right=mid,会导致循环无法终止
// ,所以此处用了left=mid+1 right=mid-1 。这样做还有一个好处:发现mid不是所要找的数时,就直接舍弃,让left和right不指向这个节点。

——————————————————————————————————————————————————

//递归实现二分法

</>复制代码

  1. public class Jianzhi{
  2. // (目标数组,目标值,左边界,右边界)
  3. public static int find(int[] list , int m ,int begin , int end) {
  4. if(list == null){
  5. System.out.println("输入的数组是null");
  6. return -1 ;
  7. }
  8. if(list.length == 1 ){
  9. return list[0]==m?0:-1 ;
  10. }
  11. if(begin > end){
  12. return -1 ;
  13. }
  14. int mid = (begin + end) / 2 ;
  15. if(list[mid] == m){
  16. return mid ;
  17. }else if (list[mid] < m ){
  18. return find(list , m ,mid+1 , end );
  19. }else if (list[mid] > m ){
  20. return find(list , m , begin , mid-1 );
  21. }
  22. return -1 ;
  23. }
  24. public static void main (String[] args){
  25. int[] num = {1,2,3,4,5,100};
  26. int m = find(num , 1,0,num.length-1) ;
  27. System.out.println(m);
  28. }
  29. }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71375.html

相关文章

  • PHP算法之二分查找

    摘要:二分查找的定义二分查找也称折半查找,它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。算法的要求从上面的定义我们可以知道,满足该算法的要求必须如下两点必须采用顺序存储结构。 showImg(https://segmentfault.com/img/remote/1460000016466416?w=800&h=191); 二分查找的...

    Soarkey 评论0 收藏0
  • 用 PHP 方式实现各类算法合集

    摘要:数据项是数据的不可分割的最小单位。数据项是对客观事物某一方面特性的数据描述。数据对象是性质相同的数据元素的集合,是数据的一个子集。数据的逻辑结构数据元素之间的相互关系称为逻辑结构。 项目地址 https://github.com/m9rco/algo... 每周最少一更,求出题,求虐待 At least once a week, ask for problems and abuse 简...

    Karrdy 评论0 收藏0
  • 用 PHP 方式实现各类算法合集

    摘要:数据项是数据的不可分割的最小单位。数据项是对客观事物某一方面特性的数据描述。数据对象是性质相同的数据元素的集合,是数据的一个子集。数据的逻辑结构数据元素之间的相互关系称为逻辑结构。 项目地址 https://github.com/m9rco/algo... 每周最少一更,求出题,求虐待 At least once a week, ask for problems and abuse 简...

    pakolagij 评论0 收藏0
  • 用 PHP 方式实现各类算法合集

    摘要:数据项是数据的不可分割的最小单位。数据项是对客观事物某一方面特性的数据描述。数据对象是性质相同的数据元素的集合,是数据的一个子集。数据的逻辑结构数据元素之间的相互关系称为逻辑结构。 项目地址 https://github.com/m9rco/algo... 每周最少一更,求出题,求虐待 At least once a week, ask for problems and abuse 简...

    leonardofed 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<