對陣列元素進行逐個查詢顯然是費時費力的工作, 我們可以使用一些方法快速地搜尋出陣列中元素的指定位置.
接下來我們介紹一種方法--二分搜尋法:
二分搜尋法充分利用了元素間的次序關係.基本思想:將n元素分成個數大致相同的涼拌,取arr[n/2]與欲查詢的x做比較,如果
下面將採用兩種方式(遞迴/非遞迴)來展示二分搜尋:
public class textarraysearch
if(index < array[midindex]) else if(index > array[midindex]) else
} /**
* 利用非遞迴和二分搜尋法查詢特定整數在陣列中的位置
* @param array
* @param index
* @return -1 要搜尋的數字不合理
* @return midindex 要搜尋的數字的下標
*/public static int binarysearch2(int array, int index)
//迴圈判斷,根據起始位置與結束為止是否相等
while(beginindex <= endindex) else if(index > array[midindex]) else
} return -1; }
public static void main(string args) ;
int number = 18;
int num = 1;
//二分搜尋必須是有序數列
arrays.sort(array);
system.out.println(number + ":" + binarysearch1(array, number, 0, array.length-1));
system.out.println(number + ":" + binarysearch2(array, number));
system.out.println(number + ":" + binarysearch2(array, num));
}}
Java 二分搜尋
二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。演算法思想 搜素過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜素過程結束 如果某一特定元素大於或者小於中間元素,則在陣列...
關於二分查詢和二分搜尋
首先是二分查詢,舉個有序的整數陣列例子 二分查詢和搜尋都是針對有序陣列 public int rank int key,int n else if cmp 0 else return lo 如果查詢到,返回陣列下標mid,如果沒找到,return lo 有人會問了為什麼返回lo?當然你非要在找不到的...
二分搜尋與STL二分查詢
用法 搜尋非遞減數列中是否包含某個元素 當資料量比較大的時候,二分比線性搜尋高效得多。流程 查詢36 實現 物件是非遞減序列,如果當資料無序時,需要預先進行一次排序。int binarysearch int a,int key,int n n為陣列長度 rerurn 0 陣列a中不存在key 複雜度...