二分演算法的前提要求傳入的序列是有序的(降序或公升序),並且有乙個目標值。二分演算法主要是首和尾的範圍控制。
具體**實現如下:
package main
import (
"fmt"
)func binary_search(l int, k int) (result bool, mid int, count int) else
if k > l[mid] else
mid = start + (end - start) /2
// 注意: (start + end)/2 overflow!!!, 可以認為start和end是在有限數軸上,如果直接start+end可能會超出這個有限的範圍(溢位!), 所以使用 起始加上兩者之間的距離
fmt.printf("start:%v, end:%v, middle:%v\n", start, end, mid)
}return
}func main()
key :=100
result, index, count := binary_search(l, key)
fmt.printf("search key:%v, result:%v, index:%v, count:%v\n", key, result, index, count)
}
執行結果如下:
start
:50, end
:99, middle
:74start
:75, end
:99, middle
:87start
:88, end
:99, middle
:93start
:94, end
:99, middle
:96start
:97, end
:99, middle
:98start
:99, end
:99, middle
:99search
key:100, result
:true, index
:99, count
:7
go語言實現二分法查詢
二分法查詢原理,自不必多說,網上隨意可找到解釋,還是比較簡單的,重點在於我要練習go語言的使用,所以實現了go語言版本。package main import fmt 迴圈二分法查詢 func binarysearch s int,target int int mid low high 2 if s...
二分查詢C語言實現
二分查詢的簡單實現 include include include define n 20 define n rand 200 int cmp const void a const void b 返回在陣列中位置 int b search int a,int p,int q,int key retu...
C語言實現二分查詢
下面為在陣列a 10 中實現二分查詢的 include includevoid binary search int arr,int right,int k 二分查詢函式 else if mid arr k else if left right printf 找不到!n int main int re...