對於乙個有序序列,定義頭尾,取中間值和目標值比較。
如果大了就重新以中間值的前乙個作為尾繼續查詢,小了就以中間值的後乙個作為頭繼續查詢。
每次淘汰一半,效率較高。
package com.yc.algorithm.recursion;
/** * 二分查詢
* @author yc
*/public class binarysearch ;
int target = 5;
int value = binarysearch(nums, target);
system.out.println("迴圈實現 : " + value);
value = binsearch(nums, 0, nums.length , target);
system.out.println("遞迴實現 : " + value);
}/**
* 迴圈實現
* @param nums
* @param target
* @return
*/private static int binarysearch(int nums, int target) else
mid = (head + tail) / 2;
}return mid;
}/**
* 遞迴實現
* @param nums
* @param head
* @param tail
* @param target
* @return
*/private static int binsearch(int nums, int head, int tail, int target) else if (nums[mid] < target)
return mid;}}
輸出如下 :
二分查詢(迴圈和遞迴實現)
二分查詢也稱折半查詢 binary search 它是一種效率較高的查詢方法。但是,折半查詢要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排列。它充分利用了元素間的次序關係,採用分治策略,可在最壞的情況下用o log n 完成搜尋任務。下面給出二分查詢的兩種實現 includeint fi...
二分查詢 Python實現(迴圈 遞迴)
維基百科 在電腦科學中,二分搜尋 英語 binary search 也稱折半搜尋 英語 half interval search 對數搜尋 英語 logarithmic search 是一種在有序陣列中查詢某一特定元素的搜尋演算法。搜尋過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜尋...
二分查詢實現(遞迴和非遞迴)
遞迴的二分查詢,查詢單個值 時間複雜度 log2n 有點像二叉排序樹的查詢 param arr 待查詢陣列,有序 param low param high param findval 待找值 return 待找值的下標,沒有返回 1 public static intbinarysearch int...