Advertisement
judarlima

recursive binary search

Jan 13th, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.57 KB | None | 0 0
  1. //
  2. //  main.swift
  3. //  exAlgorithms
  4. //
  5. //  Created by Judar Lima on 13/01/19.
  6. //  Copyright © 2019 Judar Lima. All rights reserved.
  7. //
  8.  
  9. import Foundation
  10.  
  11. func binarySearch(by number: Int, at list: [Int]) -> String {
  12.     let left = list.startIndex
  13.     let right = list.endIndex - 1
  14.     let errorMessage = "The number \(number) does not exist in this list"
  15.     let numberFound = "The number \(number) is in the list at index: "
  16.     let result = divideAndCoquer(with: number, list: list, left: left, right: right)
  17.    
  18.     return result == nil ? errorMessage : numberFound + "\(String(describing: result!))"
  19. }
  20.  
  21. func divideAndCoquer(with number: Int, list: [Int], left: Int, right: Int) -> Int? {
  22.     let middle = (left + right) / 2
  23.     if number < list[left] || number > list[right] {
  24.         return nil
  25.     }
  26.     else if number == list[left] {
  27.         return left
  28.     }
  29.     else if number == list[right] {
  30.         return right
  31.     }
  32.     else if number == list[middle] {
  33.         return middle
  34.     }
  35.     else if number < list[middle] {
  36.         return divideAndCoquer(with: number, list: list, left: left, right: middle)
  37.     }
  38.     else if number > list[middle] {
  39.         return divideAndCoquer(with: number, list: list, left: middle, right: right)
  40.     }
  41.     return nil
  42. }
  43. let list = [1, 3, 6, 7, 8, 10, 22, 23, 27, 29, 30, 33, 35, 38, 41, 43, 44, 46]
  44. let randomNumber = list.randomElement()
  45. print(binarySearch(by: randomNumber!, at: list))
  46. print("\t _________________________________")
  47.  
  48. let invalidNumber = 9123
  49. print(binarySearch(by: invalidNumber, at: list))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement