二分查詢:是一種搜尋某個值的索引的演算法。
基本條件:有序的陣列。
思路:1.將陣列折半,分成左右兩個陣列。
2.判斷要查詢的數和中間位置數值的大小,來判斷要查詢的數實在哪一半。
3.之後繼續折半查詢,直至找到這個數。
方法:二分查詢有兩種方法,一種是非遞迴方式,採用while方式,判斷是否符合要求。另一種是採用遞迴方式,採用if方式,依次遞迴,找到相應的值。
步驟一(非遞迴):
/*** * @param arr 已排好的陣列
* @param key 想要查詢的值
*/
functionbinary_search(arr, key)
else
if (key >arr[mid])
else
if (key else
}}
步驟二 (遞迴):
/*** * @param arr 已排好的陣列
* @param low 第乙個值的索引
* @param high 最後乙個值的索引
* @param key 想要查詢的值
*/function binary_search(arr,low,high,key)
var mid = parseint((high + low) / 2);
if (arr[mid] == key) else if (arr[mid] > key) else if (arr[mid] < key)
}
時間複雜度:總共有n個元素,漸漸跟下去就是n,n/2,n/4,....n/2^k,其中k就是迴圈的次數,由於你n/2^k取整後》=1,即令n/2^k=1,可得k=log2n,(是以2為底,n的對數)
o(log2n) => o(logn)
優點:比較次數少,查詢速度快,平均效能好。
缺點:要求待查表為有序表,且插入刪除困難。
結論:適用於不經常變動而查詢頻繁的有序列表。
js實現二分查詢
二分查詢,也稱為折半查詢,是指在有序的陣列裡找出指定的值,返回該值在陣列中的索引。查詢步驟如下 1 從有序陣列的最中間元素開始查詢,如果該元素正好是指定查詢的值,則查詢過程結束。否則進行下一步 2 如果指定要查詢的元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半區域查詢,然後重複第一步的...
js實現二分查詢
二分查詢需要陣列是有序的,1 先從有序陣列的最中間元素開始查詢,如果和要查詢的元素相等,直接返回索引,若不相等則下一步。2 如果指定的元素大於或者小於中間元素,則在大於或小於的那一半區域內查詢,重複第一步直到找到目標元素。不使用遞迴 1 function search arr,key else if...
二分查詢演算法實現
include include using namespace std define n 20 int binary chop int a,int n,int j,int k 找到即返回下標 else if a mid k high mid 1 尋找的值小於中間值,則在左邊一般查詢 else low...