采用二分法查找时,数据需是有序不重复的。
基本思想:假设数据是按升序排序的,对于给定值 x,从序列的中间位置开始比较,如果当前位置值等于 x,则查找成功;若 x 小于当前位置值,则在数列的前半段中查找;若 x 大于当前位置值则在数列的后半段中继续查找,直到找到为止。
public class MyArrays {
public int dichotomySearch(double[] arr, double value){
int start = 0;
int end = arr.length - 1;
while (start <= end){
int middle = (start + end) / 2;
if (value < arr[middle]){
end = middle - 1;
}else if (value > arr[middle]){
start = middle + 1;
}else {
return middle;
}
}
return -1;
}
使用二分查找法在arr数组中查找value的下标,如果value不存在,就返回-1,如果数组arr不是有序的,结果将不一定正确
public int binarySearch(int[] arr, int value){
//调用排序算法,使数组有序
sort(arr);
int start = 0;
int end = arr.length - 1;
while (start <= end){
int middle = (start + end) / 2;
if (value < arr[middle]){
end = middle - 1;
}else if (value > arr[middle]){
start = middle + 1;
}else {
return middle;
}
}
return -1;
}
因此可以先给arr数组从小到大排序,用冒泡排序实现
public void sort(char[] arr){
char temp;
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]){
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
269

被折叠的 条评论
为什么被折叠?



