【问题标题】:Binary Search program in JavaJava中的二进制搜索程序
【发布时间】:2016-09-10 23:11:49
【问题描述】:

这是我使用二进制搜索的程序代码:

import java.util.Random;


public class QSrt {

int[] arr = new int[20];

public void addElement() {
    for (int i = 0; i < arr.length; i++) {
        Random rd = new Random();
        arr[i] = rd.nextInt(10);
    }

}
public void sort(){
    for (int i = 0; i < arr.length - 1; i++) {
        for (int j = arr.length - 1; j > i; j--) {
           if(arr[j] < arr[j-1]){
              int t = arr[j];
              arr[j] = arr[j-1];
              arr[j-1] = t;
           }

        }

    }
}

public int binarySearch(int val){
    int first = 0;
    int last = arr.length - 1;
    int index = -1;
    while (first <= last) {
        int middle = (first + last)/2;
        if(arr[middle] == val){
            index = middle;
        }else if(arr[middle] < val){
            first = middle + 1;
        }else{
            last = middle - 1;


        }
    }
    return index;
}

public static void main(String[] args) {
    QSrt arr = new QSrt();
    arr.addElement();
    arr.sort();

    for(int i = 0; i < arr.arr.length;i++){
        System.out.print(arr.arr[i] + " ");
    }
    System.out.println("");
    System.out.println(arr.binarySearch(0));
}

}

但我遇到了一个问题:程序只打印已排序数组的元素,然后它继续运行并且不打印索引

图片如下: enter image description here

【问题讨论】:

  • 您需要在arr[middle] == val 的情况下使用break。如果你不这样做,那么firstlast 永远不会改变,这意味着你的循环条件永远不会是假的,你永远不会退出循环
  • binarySearch() 方法的返回类型为ArrayList,但返回int。你认为我们应该相信该程序不会在那里造成问题吗?

标签: java binary-search


【解决方案1】:

一旦获得所需的值,您需要跳出循环

if(arr[middle] == val){
        index = middle;
        return index;    //OR just => return middle;
    }

【讨论】:

    猜你喜欢
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多