, , "" ,
.
, middleVal
.
if target > middleVal {
leftIndex = middleIndex
}else {
rightIndex = middleIndex
}
if target > elements[middleIndex] {
leftIndex = middleIndex
}else {
rightIndex = middleIndex
}
. .
BinSearch(elements: [3, 4, 5], target: 2)
0 nil. (
middleIndex middleVal.
maxVal minVal .)
( http://rosettacode.org/wiki/Binary_search#Swift):
func binarySearch<T : Comparable>(elements: [T], target: T) -> Int? {
var leftIndex = 0
var rightIndex = elements.count - 1
while leftIndex <= rightIndex {
let middleIndex = (leftIndex + rightIndex) / 2
if elements[middleIndex] < target {
leftIndex = middleIndex + 1
} else if target < elements[middleIndex] {
rightIndex = middleIndex - 1
} else {
return middleIndex
}
}
return nil
}