Advertisement
Guest User

Untitled

a guest
Nov 15th, 2018
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.19 KB | None | 0 0
  1. public func binarySearchSortedOffset(arr: [Int], searchedValue: Int) -> Int {
  2.    
  3.     func hasOffset(l: Int, r: Int) -> Bool {
  4.         return arr[l] > arr[r]
  5.     }
  6.  
  7.     func isInRange(l: Int, r: Int, searchedValue: Int) -> Bool {
  8.         if hasOffset(l: l, r: r) {
  9.             return searchedValue >= arr[l] || searchedValue <= arr[r]
  10.         } else {
  11.             return searchedValue >= arr[l] && searchedValue <= arr[r]
  12.         }
  13.     }
  14.    
  15.     var leftIndex = 0
  16.     var rightIndex = arr.count - 1
  17.  
  18.     if arr.count <= 2 {
  19.         for (index,num) in arr.enumerated() {
  20.             if num == searchedValue {
  21.                 return index
  22.             }
  23.         }
  24.         return -1
  25.     }
  26.    
  27.     while (leftIndex <= rightIndex) {
  28.         if leftIndex == rightIndex {
  29.             if arr[leftIndex] == searchedValue {
  30.                 return leftIndex
  31.             } else {
  32.                 return -1
  33.             }
  34.         }
  35.        
  36.         let middle = (leftIndex+rightIndex)/2
  37.  
  38.         if isInRange(l: leftIndex, r: middle, searchedValue: searchedValue) {
  39.             rightIndex = middle
  40.         } else {
  41.             leftIndex = middle+1
  42.         }
  43.     }
  44.    
  45.     return -1
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement