A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 林鹏 中级黑马   /  2014-7-6 19:50  /  840 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 林鹏 于 2014-7-6 20:30 编辑

大家看看这个折半查找哪里有问题,当查找3时可以正确返回数组下标0,但是输入其它值时一直返回-1
  1. public class HalfSelect {
  2.         public static void main(String[] args) {
  3.                 int[] arr={3,6,9,4,7,1,8};
  4.                 int index=bisearch(arr, 6);
  5.                 System.out.println("下标为:"+index);

  6.         }

  7.         /**
  8.          * 折半查找
  9.          * @param arr
  10.          * @param key
  11.          * @return
  12.          */
  13.         public static int bisearch(int[] arr, int key) {
  14.                 int min = 0;
  15.                 int max = arr.length-1;
  16.                 int mid = (min + max) / 2;

  17.                 while (arr[mid]!=key) {
  18.                         if (key > arr[mid]) {
  19.                                 min = mid + 1;
  20.                         }
  21.                         if (key < arr[mid]) {
  22.                                 max = mid - 1;
  23.                         }
  24.                         if(min>max)
  25.                                 return -1;
  26.                         mid = (min + max) / 2;
  27.                 }
  28.                 return mid;        
  29.         }
  30. }
复制代码

点评

新人贴,顶  发表于 2014-7-6 20:59

6 个回复

倒序浏览
找到问题所在了,折半查找只针对有序数组
回复 使用道具 举报
嗯……是的,必须有序
回复 使用道具 举报
折半查找必须保证数组是有序的,毕老师在java基础的第四天讲过这个问题。
回复 使用道具 举报
嗯,看到了,开始定义数组的时候没注意
回复 使用道具 举报
非常感谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马