Skip to content

Commit 936ccee

Browse files
author
leotyliu(刘天一)
committed
15_binarysearch by golang
1 parent f0c4d7a commit 936ccee

File tree

2 files changed

+74
-0
lines changed

2 files changed

+74
-0
lines changed

go/15_binarysearch/binarysearch.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package _5_binarysearch
2+
3+
func BinarySearch(a []int, v int) int {
4+
n := len(a)
5+
if n == 0 {
6+
return -1
7+
}
8+
9+
low := 0
10+
high := n - 1
11+
for low <= high {
12+
mid := (low + high) / 2
13+
if a[mid] == v {
14+
return mid
15+
} else if a[mid] > v {
16+
high = mid - 1
17+
} else {
18+
low = mid + 1
19+
}
20+
}
21+
22+
return -1
23+
}
24+
25+
func BinarySearchRecursive(a []int, v int) int {
26+
n := len(a)
27+
if n == 0 {
28+
return -1
29+
}
30+
31+
return bs(a, v, 0, n-1)
32+
}
33+
34+
func bs(a []int, v int, low, high int) int {
35+
if low > high {
36+
return -1
37+
}
38+
39+
mid := (low + high) / 2
40+
if a[mid] == v {
41+
return mid
42+
} else if a[mid] > v {
43+
return bs(a, v, low, mid-1)
44+
} else {
45+
return bs(a, v, mid+1, high)
46+
}
47+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package _5_binarysearch
2+
3+
import "testing"
4+
5+
func TestBinarySearch(t *testing.T) {
6+
var a []int
7+
8+
a = []int{1, 3, 5, 6, 8}
9+
if BinarySearch(a, 8) != 4 {
10+
t.Fatal(BinarySearch(a, 3))
11+
}
12+
if BinarySearch(a, 4) != -1 {
13+
t.Fatal(BinarySearch(a, 4))
14+
}
15+
}
16+
17+
func TestBinarySearchRecursive(t *testing.T) {
18+
var a []int
19+
20+
a = []int{1, 3, 5, 6, 8}
21+
if BinarySearchRecursive(a, 8) != 4 {
22+
t.Fatal(BinarySearch(a, 3))
23+
}
24+
if BinarySearchRecursive(a, 4) != -1 {
25+
t.Fatal(BinarySearch(a, 4))
26+
}
27+
}

0 commit comments

Comments
 (0)