let A = [1, 2, 3, 4, 5]
let key = 4
func binarySearch(A: [Int], key: Int) -> Int {
var startIndex = 0
var endIndex = A.count - 1
var midIndex = (startIndex + endIndex) / 2
var midValue = A[midIndex]
let maxTimes = Int(log2(Double(A.count)).rounded(.up))
var currentTimes = 1
while midValue != key {
if key < midValue {
endIndex = midIndex
midIndex = (startIndex + endIndex) / 2
midValue = A[midIndex]
}
else if key > midValue {
startIndex = midIndex
midIndex = Int(((Double(startIndex) + Double(endIndex)) / 2.0).rounded(.up))
midValue = A[midIndex]
}
currentTimes += 1
if currentTimes == maxTimes {
break
}
}
if midValue == key {
return midIndex
}
return -1
}
let result = binarySearch(A: A, key: key)
print(result)
Swift 實現二分法查找
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
推薦閱讀更多精彩內容
- 起因 先說說事情的起因,最近在分析數據時經常遇到一種場景,代碼需要頻繁的讀某一張數據庫的表,比如根據地區ID獲取地...
- 1、搜索都是建立在排好序的序列之上再搜索。(1)二分法搜索拿中間的數和要搜索的數比較。(2)排序的順序要求是升序。...