mirror of
				https://github.com/autistic-symposium/master-algorithms-py.git
				synced 2025-10-31 06:09:17 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			70 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/env python3
 | |
| # -*- coding: utf-8 -*-
 | |
| # author: bt3gl
 | |
| 
 | |
| 
 | |
| def binary_search_recursive(array, item, higher=None, lower=0):
 | |
| 
 | |
|     higher = higher or len(array)
 | |
|     if higher < lower:
 | |
|         return False
 | |
|     
 | |
|     mid = (higher + lower)//2
 | |
|     if  item == array[mid]:
 | |
|         return mid
 | |
|     elif item < array[mid]:
 | |
|         return binary_search_recursive(array, item, higher=mid-1, lower=lower)
 | |
|     else:
 | |
|         return binary_search_recursive(array, item, higher=higher, lower=mid+1)
 | |
| 
 | |
| 
 | |
| def binary_search_iterative(array, item):
 | |
|     lower, higher = 0, len(array)
 | |
| 
 | |
|     while lower < higher:
 | |
|         mid = (higher+lower)//2
 | |
|         if array[mid] == item:
 | |
|             return mid
 | |
|         elif array[mid] > item:
 | |
|             higher = mid
 | |
|         else:
 | |
|             lower=mid+1
 | |
|     return False
 | |
| 
 | |
| 
 | |
| def binary_search_matrix(matrix, item, lower=0, higher=None):
 | |
|     """ Binary search in a matrix """
 | |
| 
 | |
|     if not matrix:
 | |
|         return None
 | |
|     
 | |
|     rows = len(matrix)
 | |
|     cols = len(matrix[0])
 | |
|     higher = higher or rows*cols
 | |
| 
 | |
|     if higher > lower:
 | |
|         mid = (higher + lower)//2
 | |
|         row = mid//cols
 | |
|         col = mid%cols
 | |
|         item = matrix[row][col]
 | |
| 
 | |
|         if item == item:
 | |
|             return row, col
 | |
|         elif item < item:
 | |
|             return binary_search_matrix(matrix, item, lower, mid-1)
 | |
|         else:
 | |
|             return binary_search_matrix(matrix, item, mid+1, higher)
 | |
|         
 | |
|     return None
 | |
| 
 | |
| 
 | |
| if __name__ == '__main__':
 | |
| 
 | |
|     array = [2, 3, 5, 6, 8, 10, 15, 23]
 | |
|     matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
 | |
|     item = 15
 | |
|     
 | |
|     print('Recursive: ', binary_search_recursive(array, item))
 | |
|     print('Iterative: ', binary_search_iterative(array, item))
 | |
|     print('Matrix: ', binary_search_matrix(matrix, item))
 | |
| 
 | 
