Guest User

Untitled

a guest
Feb 17th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.66 KB | None | 0 0
  1. def shifted_arr_search(shiftArr, num):
  2.  
  3. def binary_search(arr, left, right, num):
  4. if right < left:
  5. return -1
  6. m = (left+ right) / 2
  7. if arr[m] == num:
  8. return m
  9. if arr[m] > num:
  10. return binary_search(arr, left, m - 1, num)
  11. else:
  12. return binary_search(arr, m + 1, right, num)
  13.  
  14. def rec(left, right, arr, num):
  15. if left > right:
  16. return -1
  17. else:
  18. m = (left + right) / 2
  19. mid_number = shiftArr[m]
  20. if mid_number == num:
  21. return m
  22.  
  23.  
  24. if mid_number > shiftArr[left]:
  25. # shiftArr[l:m] is a sorted array
  26. # apply normal binary search if num is in this interval
  27. if num >= shiftArr[left] and num < mid_number:
  28. return binary_search(arr, left, m - 1, num)
  29. elif shiftArr[right] > mid_number:
  30. # shiftArry[m:right] is a sorted array
  31. # apply normal binary search if num is in this interval
  32. if num > mid_number and num <= shiftArr[right]:
  33. return binary_search(arr, m + 1, right, num)
  34.  
  35.  
  36. if mid_number > shiftArr[right]:
  37. # the pivot is in shiftARr[m:right]
  38. # if num is in this interval then i apply rec for this interval
  39. if num <= shiftArr[right]:
  40. return rec(m + 1, right, arr, num)
  41.  
  42. elif shiftArr[left] > mid_number:
  43. # the pivot is in shiftArr[left:m]
  44. # if num is in this interval then I apply rec for this interval
  45. if num <= shiftArr[mid]:
  46. return rec(left, m - 1, arr, num)
  47.  
  48. return -1
  49.  
  50. return rec(0, len(shiftArr) - 1, shiftArr, num)
  51.  
  52. shiftArr = [9, 12, 17, 2, 4, 5]
  53. num = 6
  54. print shifted_arr_search(shiftArr, num)
Add Comment
Please, Sign In to add comment