查找算法之二分查找

二分查找是常用的查找算法,該查找算法主要針對(duì)有序的(從大到小或從小到大排列)數(shù)組。主要有兩種方式實(shí)現(xiàn)二分查找,一種是遞歸方式,另一種是非遞歸方式

遞歸方式實(shí)現(xiàn)二分查找

/**

* 二分查找,遞歸方法

* @param nums 從小到大排列的有序數(shù)組

* @param low 左邊的索引

* @param high 右邊的索引

* @param target 要查找的目標(biāo)值

* @return 如果找到target返回target的下標(biāo),否則返回-1

*/

publicstaticintbinarySearch(int[]nums,intlow,inthigh,inttarget){

intmid=low+(high-low)/2;//防止int溢出

//同時(shí)也可以采用位運(yùn)算>>1(相當(dāng)于除以2)更高效,

//如:int mid = low + (high - low >> 1),

//同時(shí)注意位運(yùn)算的優(yōu)先級(jí)是低于加減運(yùn)算的

if(low>high){

return-1;

? ? ?? }

if(target==nums[mid]){

returnmid;

}elseif(target>nums[mid]){//當(dāng)target大于中間數(shù),向右遞歸

returnsearch2(nums,mid+1,high,target);

}elseif(target<nums[mid]){//當(dāng)target小于中間數(shù),向左遞歸

returnsearch2(nums,low,mid-1,target);

}else{

return-1;

? ? ?? }

?? }

非遞歸方式實(shí)現(xiàn)二分查找

/**

* 二分查找,針對(duì)有序的數(shù)組,非遞歸方法

*

* @param nums

* @param target

* @return 返回target下標(biāo),若target不存在則返回-1

*/

publicstaticintsearch(int[]nums,inttarget) {

intlow=0;

inthigh=nums.length-1;

while(low<=high) {

intmid=(low+high)/2;

if(target==nums[mid]) {

returnmid;

}elseif(target>nums[mid]) {

low=mid+1;

}elseif(target<nums[mid]) {

high=mid-1;

? ? ? ? ?? }

? ? ?? }

return-1;

?? }

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容