黑马程序员技术交流社区

标题: 折半查找法 [打印本页]

作者: mishisanyi    时间: 2015-6-17 16:21
标题: 折半查找法
  1. /**
  2. *
  3. */
  4. package array;

  5. /**
  6. * @author mishi
  7. *
  8. */
  9. public class Bisearch {

  10.         /**
  11.          * @param args
  12.          */
  13.         public static void main(String[] args) {
  14.                 // TODO 自动生成的方法存根
  15.                 int[] array = {1,3,5,7,9,11,14,15,16,17,20};
  16.                 System.out.println(bisearch(array,0,array.length,20));
  17.         }
  18.         public static int bisearch(int array[],int fromIndex,int endIndex,int num)
  19.         {
  20.                 int half = (fromIndex + endIndex)/2;
  21.                 while(half!=fromIndex&&half!=endIndex)
  22.                 {
  23.                         if(num<array[half])
  24.                         {
  25.                                 return bisearch(array, fromIndex, half, num);
  26.                         }
  27.                         else if(num>array[half]) {
  28.                                 return bisearch(array, half+1, endIndex, num);
  29.                         }
  30.                         else
  31.                                 return half;
  32.                 }
  33.                 if(num == array[half])
  34.                         return half;
  35.                 return -1;
  36.         }

  37. }
复制代码

作者: Nemo    时间: 2015-6-17 16:56
不错不错哦。学习中。。。
作者: lucien_he    时间: 2015-6-17 18:11
留一下  学学
作者: qq2403956244    时间: 2015-6-17 19:05
本帖最后由 qq2403956244 于 2015-6-17 19:33 编辑

  1. /**
  2. 折半查找 --->英文单词:bisearch
  3. @author q...4
  4. */
  5. /*
  6. 1.需求:改进楼主代码

  7. 2.思路:发现,楼主代码中有如下问题
  8. a.while循环,每执行一次循环都要调用一次本身,假如数很多效率低。
  9. b.循环条件需稍作修改。
  10. c.当 num >20时,比如 num=23 ,这时就会报错ArrayIndexOutOfBoundsException。

  11. 3.步骤:a.用一个while循环就可以完成查找。
  12. b.循环条件只需 头角标(索引) <= 尾角标。
  13. c.尾角标 = 数组.长度 - 1。
  14. */
  15. public class Bisearch
  16. {

  17. /**
  18. * @param args
  19. */
  20. //主函数
  21.     public static void main(String[] args)
  22.     {
  23.              // TODO 自动生成的方法存根
  24.       int[] array = {1,3,5,7,9,11,14,15,16,17,20};
  25.                   // 0 1 2 3 4 5 6 7 8 9 10 角标
  26.       System.out.println("Index="+bisearch(array,0,array.length-1,20));
  27.     }

  28.    //定义一个方法判断需要查找的元素是否在数组中,是->直接返回结果,不是->返回-1 。(角标没有负数)
  29.     public static int bisearch(int array[],int fromIndex,int endIndex,int num)
  30.     {

  31.         while(fromIndex <= endIndex)    //half!=fromIndex&&half!=endIndex
  32.         {
  33.            int half = (fromIndex + endIndex)/2;   //中角标。5,8,9,10

  34.         if(num<array[half])     //20<11,20<16,20<17,20<20
  35.        {
  36.            endIndex = half-1;    //return bisearch(array, fromIndex, half, num);

  37.        }
  38.        else if(num>array[half]) {    //20>11,20>16,20>17

  39.           //return bisearch(array, half+1, endIndex, num);
  40.             fromIndex = half+1;      //6,9,10
  41.        }
  42.       else
  43.        {
  44.               return half;   //10
  45.        }
  46.     }
  47.       //if(num == array[half])
  48.        // return half;
  49.        return -1;
  50.     }
  51. }
复制代码




作者: zc强盗    时间: 2015-6-17 21:07
学了就忘了
作者: mishisanyi    时间: 2015-6-18 14:37
谢谢大家的支持,楼上的我都加了黑马分,谢谢啦
作者: yzzojf    时间: 2015-6-18 14:58
留存,学习,辛苦了!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2