# My Solution:
> count = 0
> def binary_search(sorted_arr, key, length):
> global count
> print (sorted_arr)
> count = count + 1
> midpt = int(len(sorted_arr)/2)
> if key == sorted_arr[midpt]:
> print("Found")
> elif count > length:
> print("Not Found")
> elif key < sorted_arr[midpt]:
> binary_search(sorted_arr[:midpt], key, length)
> else:
> binary_search(sorted_arr[midpt+1:], key, length)
>
> target = [1,2,3,4,4,5,6,7,7,7,8,9]
> binary_search(target, 10, len(target))
> print(count)
# Problem here is that the Max Recursion can occur in some cases where the input is large enough, which can be a problem and we need to avoid that. Max Recursion check is there but that check will still wait till the complete arrray is not finished. Better is to use a fact the N/2 > Log(n)
===============================================================
# Defined Solution
> def binary_search(arr, low, high, x):
>
> #Check base case
>
> if high >= low:
>
> mid = (high + low) // 2
>
> # If element is present at the middle itself
> if arr[mid] == x:
> return mid
>
> # If element is smaller than mid, then it can only
> # be present in left subarray
> elif arr[mid] > x:
> return binary_search(arr, low, mid - 1, x)
>
> # Else the element can only be present in right subarray
> else:
> return binary_search(arr, mid + 1, high, x)
>
> else:
> #Element is not present in the array
> return -1
>
> arr = [ 2, 3, 4, 10, 40 ]
> x = 10
> result = binary_search(arr, 0, len(arr)-1, x)
# Recursive Binary Search
> def bin_ser_recursive(arr, k):
> l = len(arr)//2
> print(arr)
> if l == 0:
> return False
> if k == arr[l]:
> return True
> elif k < arr[l]:
> return bin_ser_recursive(arr[:l], k)
> else:
> return bin_ser_recursive(arr[l+1:], k)
>
> target = [1,2,3,4,4,5,6,7,7,7,8,9]
> print(bin_ser_recursive(target, 7))
def heap_sort(arr):
j = 0
max = arr[0]
if len(arr) == 1:
return arr
print (arr)
i = 1
while i < len(arr):
if max < arr[i]:
max = arr[i]
j = i
i+=1
arr[j] = arr[0]
arr[0] = max
print(arr[0])
return [arr[0]] + heap_sort(arr[1:])
print(heap_sort([1,4,9,8,7,2,3,4 ,17 ,3 ,12 ,9 ,6]))
> # Opposite selection sort