diff --git a/Count Occurrences/README.markdown b/Count Occurrences/README.markdown index 8e935ea58..95f020e90 100644 --- a/Count Occurrences/README.markdown +++ b/Count Occurrences/README.markdown @@ -28,7 +28,7 @@ func countOccurrences(of key: T, in array: [T]) -> Int { var high = array.count while low < high { let midIndex = low + (high - low)/2 - if a[midIndex] < key { + if array[midIndex] < key { low = midIndex + 1 } else { high = midIndex @@ -42,7 +42,7 @@ func countOccurrences(of key: T, in array: [T]) -> Int { var high = array.count while low < high { let midIndex = low + (high - low)/2 - if a[midIndex] > key { + if array[midIndex] > key { high = midIndex } else { low = midIndex + 1 diff --git a/Kth Largest Element/README.markdown b/Kth Largest Element/README.markdown index b23d22b74..7e60a8d4a 100644 --- a/Kth Largest Element/README.markdown +++ b/Kth Largest Element/README.markdown @@ -88,7 +88,7 @@ public func randomizedSelect(_ array: [T], order k: Int) -> T { var a = array func randomPivot(_ a: inout [T], _ low: Int, _ high: Int) -> T { - let pivotIndex = random(min: low, max: high) + let pivotIndex = Int.random(in: low...high) a.swapAt(pivotIndex, high) return a[high] } diff --git a/Selection Sampling/README.markdown b/Selection Sampling/README.markdown index 741f592f4..11465b90e 100644 --- a/Selection Sampling/README.markdown +++ b/Selection Sampling/README.markdown @@ -7,6 +7,12 @@ Let's say you have a deck of 52 playing cards and you need to draw 10 cards at r Here's a very fast version: ```swift +public func random(min: Int, max: Int) -> Int { + assert(min < max) + return min + Int(arc4random_uniform(UInt32(max - min + 1))) +} + + func select(from a: [T], count k: Int) -> [T] { var a = a for i in 0..(from a: [T], count k: Int) -> [T] { for i in 0..