【发布时间】: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));
}
}
但我遇到了一个问题:程序只打印已排序数组的元素,然后它继续运行并且不打印索引
【问题讨论】:
-
您需要在
arr[middle] == val的情况下使用break。如果你不这样做,那么first和last永远不会改变,这意味着你的循环条件永远不会是假的,你永远不会退出循环 -
binarySearch()方法的返回类型为ArrayList,但返回int。你认为我们应该相信该程序不会在那里造成问题吗?
标签: java binary-search