二分查詢實現(遞迴和非遞迴)

2021-09-24 16:21:27 字數 1794 閱讀 8313

/**

* 遞迴的二分查詢,查詢單個值

* 時間複雜度:log2n

* 有點像二叉排序樹的查詢

* @param arr 待查詢陣列,有序

* @param low

* @param high

* @param findval 待找值

* @return 待找值的下標,沒有返回-1

*/public

static

intbinarysearch

(int

arr,

int low,

int high,

int findval)

//比較值

int mid;

mid =

( low + high )/2

;//在右邊找

if(findval > arr[mid]

)//在左邊找

else

if(findval < arr[mid]

)//上面都不成立,則找到值

else

}/**

* 優化

* 遞迴的二分查詢,查詢可能有多個相同值

* 時間複雜度: log2n

* 有點像二叉排序樹的查詢

** 思路:找到第乙個,往它的左邊遍歷,右邊遍歷時再新增,像打太極一樣,掃過去掃回來,看似打醬油,實則暗藏殺機

* @param arr 待查詢陣列,有序

* @param low

* @param high

* @param findval 待找值

* @return 待找值的下標,沒有返回-1

*/public

static arraylist

binarysearch2

(int

arr,

int low,

int high,

int findval)

//比較值

int mid;

mid =

( low + high )/2

;//在右邊找

if(findval > arr[mid]

)//在左邊找

else

if(findval < arr[mid]

)//上面都不成立,則找到值

else

temp --;}

//向右掃面,並且加入,這樣,下標就是有序的

temp = temp +1;

while

(true

) resindexlist.

add(temp)

; temp ++;}

return resindexlist;

}}

/**

* 二分查詢的非遞迴演算法

* @param arr

* @param low

* @param high

* @param findval

* @return

*/public

static

intbinarysearchnotrecursion

(int

arr ,

int low ,

int high ,

int findval)

else

if(findval < arr[mid]

)else

}//沒找到

return-1

;}

二分查詢 非遞迴實現和遞迴實現

二分查詢 演算法思想 又叫折半查詢,要求待查詢的序列有序。每次取中間位置的值與待查關鍵字比較,如果中間位置的值比待查關鍵字大,則在前半部分迴圈這個查詢的過程,如果中間位置的值比待查關鍵字小,則在後半部分迴圈這個查詢的過程。直到查詢到了為止,否則序列中沒有待查的關鍵字。二分查詢的前提是這個陣列是有序的...

二分查詢 非遞迴實現和遞迴實現

二分查詢的條件是對一組有序陣列的查詢,這一點很容易忘記,在使用二分查詢的時候先要對陣列進行排序。先說一下二分查詢的思路 乙個有序陣列,想要查詢乙個數字key的下標,首先算出中間下標mid,利用mid把這個陣列分為兩半,前一半從下標0到mid 1,後一半從mid 1到陣列最後乙個元素 下標是陣列長度減...

二分查詢 遞迴和非遞迴

二分查詢要求 資料儲存在順序儲存結構中 數字有序排放 原理 將陣列分為三部分,依次是左值,中值,右值 將要查詢的值和陣列的中值進行比較,若小於中值則在中值前 面找,若大於中值則在中值後面找,等於中值時直接返回。然後依次是乙個遞迴過程,將前半部分或者後半部分繼續分解為三部分。迴圈實現二分查詢 temp...