From b41b80d8a05ec15b1dfd5e45a0c9de299f77a1de Mon Sep 17 00:00:00 2001 From: prokhorovxo Date: Sat, 12 Mar 2022 12:06:56 +0200 Subject: [PATCH 1/2] Update BinarySearch.swift Replace if with guard https://github.com/raywenderlich/swift-style-guide#golden-path --- Binary Search/BinarySearch.swift | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Binary Search/BinarySearch.swift b/Binary Search/BinarySearch.swift index d6623e355..b67000fe9 100644 --- a/Binary Search/BinarySearch.swift +++ b/Binary Search/BinarySearch.swift @@ -14,17 +14,17 @@ import Foundation // The recursive version of binary search. public func binarySearch(_ a: [T], key: T, range: Range) -> Int? { - if range.lowerBound >= range.upperBound { + guard range.lowerBound < range.upperBound else { return nil + } + + let midIndex = range.lowerBound + (range.upperBound - range.lowerBound) / 2 + if a[midIndex] > key { + return binarySearch(a, key: key, range: range.lowerBound ..< midIndex) + } else if a[midIndex] < key { + return binarySearch(a, key: key, range: midIndex + 1 ..< range.upperBound) } else { - let midIndex = range.lowerBound + (range.upperBound - range.lowerBound) / 2 - if a[midIndex] > key { - return binarySearch(a, key: key, range: range.lowerBound ..< midIndex) - } else if a[midIndex] < key { - return binarySearch(a, key: key, range: midIndex + 1 ..< range.upperBound) - } else { - return midIndex - } + return midIndex } } From 1091db513f3fe4e1a389e45f9ca85ab0304a6523 Mon Sep 17 00:00:00 2001 From: prokhorovxo Date: Sat, 12 Mar 2022 12:09:15 +0200 Subject: [PATCH 2/2] Update README.markdown --- Binary Search/README.markdown | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/Binary Search/README.markdown b/Binary Search/README.markdown index 0cecce6cf..eb37ea000 100644 --- a/Binary Search/README.markdown +++ b/Binary Search/README.markdown @@ -58,26 +58,17 @@ Here is a recursive implementation of binary search in Swift: ```swift func binarySearch(_ a: [T], key: T, range: Range) -> Int? { - if range.lowerBound >= range.upperBound { - // If we get here, then the search key is not present in the array. + guard range.lowerBound < range.upperBound else { return nil - + } + + let midIndex = range.lowerBound + (range.upperBound - range.lowerBound) / 2 + if a[midIndex] > key { + return binarySearch(a, key: key, range: range.lowerBound ..< midIndex) + } else if a[midIndex] < key { + return binarySearch(a, key: key, range: midIndex + 1 ..< range.upperBound) } else { - // Calculate where to split the array. - let midIndex = range.lowerBound + (range.upperBound - range.lowerBound) / 2 - - // Is the search key in the left half? - if a[midIndex] > key { - return binarySearch(a, key: key, range: range.lowerBound ..< midIndex) - - // Is the search key in the right half? - } else if a[midIndex] < key { - return binarySearch(a, key: key, range: midIndex + 1 ..< range.upperBound) - - // If we get here, then we've found the search key! - } else { - return midIndex - } + return midIndex } } ```