[swift] guard 문을 사용하여 정렬된 배열에서 이진 검색을 할 수 있나요?
func binarySearch<T: Comparable>(_ array: [T], key: T) -> Int? {
guard !array.isEmpty else { return nil }
var low = 0
var high = array.count - 1
while low <= high {
let mid = low + (high - low) / 2
if array[mid] == key {
return mid
} else if array[mid] < key {
low = mid + 1
} else {
high = mid - 1
}
}
return nil
}
let sortedArray = [1, 3, 5, 7, 9, 11, 13, 15]
if let index = binarySearch(sortedArray, key: 7) {
print("Element found at index: \(index)")
} else {
print("Element not found")
}
위의 코드는 이진 검색을 위한 함수 binarySearch
를 정의하고, guard
문을 사용하여 배열이 비어있는지 확인합니다. 이후 이진 검색 알고리즘을 적용하여 원하는 값을 찾거나 찾지 못한 경우 nil
을 반환합니다.
참고 문헌:
- https://docs.swift.org/swift-book/LanguageGuide/ControlFlow.html
- https://en.wikipedia.org/wiki/Binary_search_algorithm