Median of two sorted arrays with different sizes in O ( log ( min ( n , m ) ) ) | Function to find median of given two sorted arrays ; if i = n , it means that Elements from a [ ] in the second half is an empty set . If j = 0 , it means that Elements from b [ ] in the first half is an empty set . so it is necessary to check that , because we compare elements from these two groups . searching on right ; if i = 0 , it means that Elements from a [ ] in the first half is an empty set and if j = m , it means that Elements from b [ ] in the second half is an a [ ] in the first half is an empty set that , because we compare elements from these two groups . searching on left ; we have found the desired halves . ; this condition happens when we don 't have  any elements in the first half from a[] so  we returning the last element in b[] from  the first half. ; and this condition happens when we don 't  have any elements in the first half from  b[] so we returning the last element in  a[] from the first half. ; Function to find maximum ; Driver code ; we need to define the smaller array as the first parameter to make sure that the time complexity will be O ( log ( min ( n , m ) ) )
def findMedianSortedArrays ( a , n , b , m ) : NEW_LINE INDENT min_index = 0 NEW_LINE max_index = n NEW_LINE while ( min_index <= max_index ) : NEW_LINE INDENT i = ( min_index + max_index ) // 2 NEW_LINE j = ( ( n + m + 1 ) // 2 ) - i NEW_LINE if ( i < n and j > 0 and b [ j - 1 ] > a [ i ] ) : NEW_LINE INDENT min_index = i + 1 NEW_LINE DEDENT elif ( i > 0 and j < m and b [ j ] < a [ i - 1 ] ) : NEW_LINE INDENT max_index = i - 1 NEW_LINE DEDENT else : NEW_LINE INDENT if ( i == 0 ) : NEW_LINE INDENT return b [ j - 1 ] NEW_LINE DEDENT if ( j == 0 ) : NEW_LINE INDENT return a [ i - 1 ] NEW_LINE DEDENT else : NEW_LINE INDENT return maximum ( a [ i - 1 ] , b [ j - 1 ] ) NEW_LINE DEDENT DEDENT DEDENT print ( " ERROR ! ! ! ▁ " ,   " returning " ) NEW_LINE return 0 NEW_LINE DEDENT def maximum ( a , b ) : NEW_LINE INDENT return a if a > b else b NEW_LINE DEDENT if __name__ == " _ _ main _ _ " : NEW_LINE INDENT a = [ 900 ] NEW_LINE b = [ 10 , 13 , 14 ] NEW_LINE n = len ( a ) NEW_LINE m = len ( b ) NEW_LINE if ( n < m ) : NEW_LINE INDENT print ( " The ▁ median ▁ is : ▁ " , findMedianSortedArrays ( a , n , b , m ) ) NEW_LINE DEDENT else : NEW_LINE INDENT print ( " The ▁ median ▁ is : ▁ " , findMedianSortedArrays ( b , m , a , n ) ) NEW_LINE DEDENT DEDENT