- 二分法查找的前提是:序列有序;所以在再調(diào)用binarySearch方法之前,我們先要對元素進(jìn)行排序;
- 常用形式:
public static void main(String[] args) {
List<String> li = new ArrayList<String>();
li.add("abcd");
li.add("llbc");
li.add("dddddd");
li.add("dddddd");
li.add("kl"
sop("未排序前 "+li);
Collections.sort(li);
sop("自然排序后 "+li);
//正常查找:
int index = Collections.binarySearch(li,"llbc");
sop("llbc 角標(biāo): "+index);
//非正常查找:
int index1 = Collections.binarySearch(li,"bb");
sop("bb 角標(biāo): "+index1);
}
public static void sop(Object obj) {
System.out.println(obj);
}
-
結(jié)果:
- 下面我們再來回顧一下二分法查找:
**//自定義一個二分法查找器,回顧一下二分法的原理;**
//返回索引,即角標(biāo)。
public static int halfSearch(List<String> li, String key) {
int min, mid, max;
min = 0;
max = li.size();
while(min<+max) {
mid = (min+max) >> 1;// /2
String str = li.get(mid);
int num = str.compareTo(key);
if(num>0)
max = mid-1;
else if(num<0)
min = mid+1;
else
return mid;
}
//當(dāng)遍歷完整個集合序列還未找到指定元素,就返回-1;
return -1;
}
**sop("未排序前 "+li);**
Collections.sort(li);
sop("自然排序后 "+li);
//正常查找:
int index = halfSearch(li,"kwwwwl");
sop("kwwwwl 角標(biāo): "+index);
//非正常查找:
int index1 = halfSearch(li,"bb");
sop("bb 角標(biāo): "+index1);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。