二分查詢
演算法思想:又叫折半查詢,要求待查詢的序列有序。每次取中間位置的值與待查關鍵字比較,如果中間位置的值比待查關鍵字大,則在前半部分迴圈這個查詢的過程,如果中間位置的值比待查關鍵字小,則在後半部分迴圈這個查詢的過程。直到查詢到了為止,否則序列中沒有待查的關鍵字。
二分查詢的前提是這個陣列是有序的。
第一種:非遞迴實現:
package com.bjsxt.com;
public class testdigui ;
int num=1;
system.out.println(fun(arr,num));
} private static int fun(int arr, int num)
while(low<=heigh) else if(num第二種:遞迴實現:
package com.bjsxt.com;
public class testdigui ;
int num=1;
int low=0;
int heigh=arr.length-1;
system.out.println(fun(arr,num,low,heigh));
} private static int fun(int arr, int num,int low,int heigh)
int mid= (low+heigh)/2;
if(num==arr[mid]) else if(num問題:為什麼在使用非遞迴實現的時候,第乙個元素和最後乙個元素涉及不到?
原因:裡邊while的條件是low<=heigh,而不是low
二分查詢 非遞迴實現和遞迴實現
二分查詢的條件是對一組有序陣列的查詢,這一點很容易忘記,在使用二分查詢的時候先要對陣列進行排序。先說一下二分查詢的思路 乙個有序陣列,想要查詢乙個數字key的下標,首先算出中間下標mid,利用mid把這個陣列分為兩半,前一半從下標0到mid 1,後一半從mid 1到陣列最後乙個元素 下標是陣列長度減...
二分查詢實現(遞迴和非遞迴)
遞迴的二分查詢,查詢單個值 時間複雜度 log2n 有點像二叉排序樹的查詢 param arr 待查詢陣列,有序 param low param high param findval 待找值 return 待找值的下標,沒有返回 1 public static intbinarysearch int...
二分查詢的遞迴和非遞迴實現
二分查詢的遞迴和非遞迴實現 遞迴實現 時間複雜度 o logn 空間複雜度 o logn int binsearch int arr,int left,int right,int key 遞迴實現二分查詢 if arr mid key if arr mid key return 1 非遞迴實現 時間...