-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathContents.swift
73 lines (51 loc) · 1.82 KB
/
Contents.swift
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
// MARK: - BINARY SEARCH ALGORITHM
let numArray = [4,2,10,16,14,99,87,64]
// MARK: - Use While Loop
func binarySearch(searchValue: Int, array: [Int]) -> Bool {
// Start from smallest
let array = array.sorted(by: <)
var leftIndex = 0
var rightIndex = array.count - 1
// While loop -> to find middleIndex
while leftIndex <= rightIndex {
let middleIndex = (leftIndex + rightIndex) / 2
let middleValue = array[middleIndex]
if searchValue == middleValue {
return true
}
if searchValue < middleValue {
rightIndex = middleIndex - 1
}
if searchValue > middleValue {
leftIndex = middleIndex + 1
}
}
return false
}
// MARK: - Use Recursion
func alternateBinarySearch(searchValue: Int, array: [Int]) -> Bool {
if array.count == 0 { return false }
var sortedArray = array.sorted(by: <)
let leftIndex = 0;
let rightIndex = array.count - 1
let middleIndex = (leftIndex + rightIndex) / 2
let middleValue = array[middleIndex]
if searchValue < sortedArray[leftIndex] || searchValue > sortedArray[rightIndex]{
return false
}
if searchValue == middleValue {
return true
}
if searchValue < middleValue {
sortedArray = Array(sortedArray[leftIndex...middleIndex - 1])
print(sortedArray)
return alternateBinarySearch(searchValue: searchValue, array: sortedArray)
}
if searchValue > middleValue {
sortedArray = Array(sortedArray[middleIndex + 1...rightIndex])
print(sortedArray)
return alternateBinarySearch(searchValue: searchValue, array: sortedArray)
}
return false
}
alternateBinarySearch(searchValue: 92, array: numArray)