import java.util.*;
public class CollectionsDemo {
public static void main(String[] args) {
List<String> al = new ArrayList<String>();
al.add("abc");
al.add("z");
al.add("qq");
al.add("kkkkk");
al.add("aaaa");
Collections.sort(al);
System.out.println(al);
int index =halfSearch(al,"aaa");
System.out.println(index);
}
public static int halfSearch(List<String> list,String s){
int min = 0,max = list.size()-1;
int mid = 0;
while(min<max){
mid = (min+max)>>1;
String str = list.get(mid);
int num = str.compareTo(s);
if(num<0)
min = mid+1;
else if(num>0)
max = mid-1;
else
return mid;
}
return -min-1;
}
}
最后一个return返回的是-(插入点)-1 那这里的min就是插入点,为什么插入点是min啊?作者: wsssx 时间: 2011-12-12 11:45
提示: 作者被禁止或删除 内容自动屏蔽作者: 李明 时间: 2011-12-12 14:48
public static int halfSearch(List<String> list,String s){
int min = 0,max = list.size()-1;
int mid = 0;
while(min<max){
mid = (min+max)>>1;
String str = list.get(mid);
int num = str.compareTo(s);
if(num<0)
min = mid+1;
else if(num>0)
max = mid-1;
else
return mid;
}
return -min-1;//这一句是在while循环不执行的时候才会执行,此时min就等于0,所以此处用0代替结果是一样的。
}作者: t_mac 时间: 2011-12-12 15:06
李明 发表于 2011-12-12 14:48
public static int halfSearch(List list,String s){
int min = 0,max = list.size()-1;
...
public static int halfSearch(List<String> list,String s){
int min = 0,max = list.size()-1;
int mid = 0;
while(min<max){
mid = (min+max)>>1;//mid取得中间值角标,>>1相当于/2.
String str = list.get(mid);//取得中间值角标对应的字符串。
int num = str.compareTo(s);//按自然字母顺序比较s和中间值,str大于s,则返回1,小于返回-1,等于返回零
if(num<0)
min = mid+1;//str小于s,表示,插入位置比str大
else if(num>0)
max = mid-1;//str大于s,表示,插入位置比str小
else
return mid;//正好就是中间值位置
}
return -min-1;//这一句是在while循环不执行的时候才会执行,此时min就等于0,所以此处用0代替结果是一样的。
}