-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsortedArraySearch.go
More file actions
55 lines (51 loc) · 1.35 KB
/
sortedArraySearch.go
File metadata and controls
55 lines (51 loc) · 1.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package searching
import (
"math/rand"
"time"
)
// FindItemIndexSequentialSkipSearch Returns the index of value k in a sorted searchList, return -1 if k not found.
func FindItemIndexSequentialSkipSearch(searchList []int, k int) int {
i := 0
size := len(searchList)
rand.Seed(time.Now().UnixNano())
for i < size && searchList[i] < k {
j := i+rand.Intn(size-i)
if searchList[i] < searchList[j] && searchList[j] <= k {
i = j
if searchList[i] == k {
return i
}
}
i++
}
if i >= size || searchList[i] > k {
return -1
}else {
return i
}
}
// FindItemIndexBinarySearch Returns the index of value k in a sorted searchList, return -1 if k not found.
//Method uses binary search.
func FindItemIndexBinarySearch(searchList []int, key int) int {
return findItemViaBinarySearch(searchList, 0, len(searchList)-1, key)
}
// function recursively applies binary search on a sorted list.
func findItemViaBinarySearch(searchList []int, start, end int, key int) int {
if (end - start) <=1 {
if searchList[start] == key{
return start
} else if searchList[end] == key{
return end
}
}else {
mid := start + (end-start)/2
if searchList[mid] == key {
return mid
} else if key < searchList[mid] {
return findItemViaBinarySearch(searchList, start, mid, key)
} else {
return findItemViaBinarySearch(searchList, mid, end, key)
}
}
return -1
}