java 二分法詳解幾種方法

創(chuàng)新互聯(lián)公司主要從事網(wǎng)站制作、網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)柯橋,十載網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):18980820575
二分查找(java實(shí)現(xiàn))
二分查找
算法思想:又叫折半查找,要求待查找的序列有序。每次取中間位置的值與待查關(guān)鍵字比較,如果中間位置的值比待查關(guān)鍵字大,則在前半部分循環(huán)這個(gè)查找的過(guò)程,如果中間位置的值比待查關(guān)鍵字小,則在后半部分循環(huán)這個(gè)查找的過(guò)程。直到查找到了為止,否則序列中沒(méi)有待查的關(guān)鍵字。
實(shí)現(xiàn):
1.非遞歸代碼
public static int biSearch(int []array,int a){
int lo=0;
int hi=array.length-1;
int mid;
while(lo<=hi){
mid=(lo+hi)/2;
if(array[mid]==a){
return mid+1;
}else if(array[mid]<a){
lo=mid+1;
}else{
hi=mid-1;
}
}
return -1;
}
2.遞歸實(shí)現(xiàn)
public static int sort(int []array,int a,int lo,int hi){
if(lo<=hi){
int mid=(lo+hi)/2;
if(a==array[mid]){
return mid+1;
}
else if(a>array[mid]){
return sort(array,a,mid+1,hi);
}else{
return sort(array,a,lo,mid-1);
}
}
return -1;
}
時(shí)間復(fù)雜度為 O(logN)
查找第一個(gè)元素出現(xiàn)的位置(元素允許重復(fù))
public static int biSearch(int []array,int a){
int n=array.length;
int low=0;
int hi=n-1;
int mid=0;
while(low<hi){
mid=(low+hi)/2;
if(array[mid]<a){
low=mid+1;
}else{
hi=mid;
}
}
if(array[low]!=a){
return -1;
}else{
return low;
}
}
查詢?cè)刈詈笠淮纬霈F(xiàn)的位置
public static int biSearch(int []array,int a){
int n=array.length;
int low=0;
int hi=n-1;
int mid=0;
while(low<hi){
mid=(low+hi+1)/2;
if(array[mid]<=a){
low=mid;
}else{
hi=mid-1;
}
}
if(array[low]!=a){
return -1;
}else{
return hi;
}
}
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
當(dāng)前標(biāo)題:java二分法詳解幾種實(shí)現(xiàn)方法
分享鏈接:http://chinadenli.net/article4/jiihoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、云服務(wù)器、網(wǎng)站導(dǎo)航、、營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)