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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 乔九 中级黑马   /  2013-2-24 09:47  /  1290 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package com.itcast;

import java.util.Arrays;

public class StaticImport {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                int[]arr={3,2,4};
                //Arrays.sort(arr);注释此句后,排序查找3结果为-3,注释前为排序后的位置???求解
                System.out.println(Arrays.toString(arr));
                int index=Arrays.binarySearch(arr,3);
                System.out.println(index);

        }

}

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 神马都是浮云

查看全部评分

3 个回复

正序浏览
binarySearch(),二分法其实就是折半查找
在使用二分搜索法来搜索指定的 int 型数组,以获得指定的值。必须在进行此调用之前对数组进行排序(通过 sort(int[]) 方法)。如果没有对数组进行排序,则结果是不确定的。如果数组包含多个带有指定值的元素,则无法保证找到的是哪一个
至于你的为什么是-3
如果你要找的值它包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。插入点 被定义为将键插入数组的那一点:即第一个大于此键的元素索引,如果数组中的所有元素都小于指定的键,则为 a.length。注意,这保证了当且仅当此键被找到时,返回的值将 >= 0
而这里通过二分法找到第一个大于3的数是4(而4的索引是2,按照上面的算法就是-3)

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 赞一个!

查看全部评分

回复 使用道具 举报
折半查找方法是要建立在有序序列的基础上的,必须先对原数组进行排序才能进行折半查找

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 罗海云 于 2013-2-24 10:41 编辑

对了,看到楼下.突然还有发现有个问题没答道...就是折半查找的数组必须是有序的..
  1. private static int binarySearch0(short[] a, int fromIndex, int toIndex,
  2. short key) {
  3. int low = fromIndex;          <FONT color=red>//下面就让我带着你跟着程序一步一步的走.   这个是我去看的src包中的源码/  low = 0;</FONT>
  4. int high = toIndex - 1;        // high = arr.length - 1;   high = 2;

  5. while (low <= high) {        // 0 <= 2    成立向下执行
  6. int mid = (low + high) >>> 1;    // mid = (0+2)>>>1    mid=1
  7. short midVal = a[mid];      midVal = a[1]    midVal = 2

  8. if (midVal < key)       midval < 3;  成立
  9. low = mid + 1;    //  low = 1+1  low = 2;
  10. else if (midVal > key)   
  11. high = mid - 1;
  12. else
  13. return mid; // key found
  14. }
  15. return -(low + 1); // key not found.<FONT color=red>returnh -(2+1);  就是这样了./..</FONT>
复制代码
呵呵,解释完毕..谢谢

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马