public class Bubble { public static void main(String[] args) {
Bubble b = new Bubble();
int a[] = {1,4,2,6,9,5,3,7,8};
b.binarySerach(a, 9);
}
public static void binarySerach(int a[], int n){
int startno = 0;
int lastno = a.length-1;
int middle = (startno+lastno)/2;

while(startno<lastno){
if(middle == n){
System.out.print(a[middle]);
break;
}else if(middle > n){
lastno = middle-1;
}else if(middle < n){
startno = middle+1;
}
middle = (startno+lastno)/2;
}
}}什么原因呀,没有打印出结果

解决方案 »

  1.   

    b.binarySerach(a, 9);??首先你要知道你要实现什么样的效果
     if(middle == n){
                    System.out.print(a[middle]);
                    break;
    很明显,middle == 9时输出  a[9]
    你是数组才几个数啊?如果你要输出a[9];
    何必这样拐个大弯呢
      

  2.   

    我想说,你这不是二分排序法吧,这是二分查找法,如果是二分查找法,得这么改:
    if(a[middle] == n){
                    System.out.print(a[middle]);
                    break;
    }
      

  3.   

    帮你改了下
    二分查找import java.util.Arrays;public class Bubble { public static void main(String[] args) {
    Bubble b = new Bubble();
    int a[] = { 1, 4, 2, 6, 9, 5, 3, 7, 8 };
    b.binarySerach(a, 3);
    b.binarySerach(a, 12);
    } public void binarySerach(int a[], int n) {
    Arrays.sort(a);//sort
    int startno = 0;
    int lastno = a.length - 1;
    int middle = (startno + lastno) / 2; while (startno < lastno) {
    if (a[middle] == n) {//element of array a[]
    System.out.println("find num " +  n);
    return;
    } else if (middle > n) {
    lastno = middle - 1;
    } else if (middle < n) {
    startno = middle + 1;
    }
    middle = (startno + lastno) / 2;
    }
    System.out.println("can't find num " + n);
    }}find num 3
    can't find num 12
      

  4.   

    5楼的代码有错误的。你查找1的时候就出错了。查不出来import java.util.Arrays;public class A { public static void main(String[] args) {
            A b = new A();
            int a[] = { 1, 4, 2, 16, 9, 5, 3, 7, 8 };
            b.binarySerach(a, 16);
            b.binarySerach(a, 12);
        }    public void binarySerach(int a[], int n) {
            Arrays.sort(a);//sort
            int startno = 0;
            int lastno = a.length - 1;
            int middle = (startno + lastno);        while (startno <= lastno) {//这里少了一次循环
                if (a[middle] == n) {//element of array a[]
                    System.out.println("find num " +  n);
                    return;
                } else if (a[middle] > n) {//这里应比较的是数组下表为middle的元素和要查找的数
                    lastno = middle - 1;
                } else if (a[middle] < n) {//这里应比较的是数组下表为middle的元素和要查找的数
                    startno = middle + 1;
                }
                middle = (startno + lastno) / 2;
            }
            System.out.println("can't find num " + n);
        }}
      

  5.   

    二分法查找的前提是元素有序,应先排序再查
    http://blog.csdn.net/wangdong20/article/details/6991070