二分法的前提是:集合中的元素是按一定规则排序的。
对List中的String排序,以及二分法实现示例:
package test;
import java.util.ArrayList;
import java.util.Collections;
public class TestBinarySearch {
public static void main(String[] args) {
ArrayList<String> list= new ArrayList<String>();
list.add("b");
list.add("a");
list.add("d");
list.add("c");
list.add("e");
//先将list内容排序(二分法前提)
Collections.sort(list);
//打印输出,结果:[a, b, c, d, e]
System.out.println(list);
System.out.println("index="+BinarySearchTest(list,"c"));
System.out.println("index="+RecursionBinarySearch(list,"c",0,list.size()-1));
}
//普通二分法查找
public static int BinarySearchTest(ArrayList<String> list,String key){
int min,max,mid;
min = 0;
max = list.size()-1;
while(max>min){
mid = (min+max)/2;
int num = key.compareTo(list.get(mid));
if(num > 0)
min = mid + 1;
else if(num < 0)
max = mid - 1;
else
return mid;
}
return -1;
}
//递归二分法
public static int RecursionBinarySearch(ArrayList<String> list,String key,int min,int max){
if(max<min)
return -1;
int mid = (min+max)/2;
int num = key.compareTo(list.get(mid));
if(num > 0)
return RecursionBinarySearch(list,key,mid+1,max);
else if(num < 0)
return RecursionBinarySearch(list,key,min,mid-1);
else
return mid;
}
}