forked from menault/TD4_DEV51_Qualite_Algo
		
	ex3 fait
This commit is contained in:
		
							
								
								
									
										101
									
								
								ex3_TD4.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								ex3_TD4.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,101 @@ | ||||
| def insertion_sort(array): | ||||
|     for i in range(1, len(array)): | ||||
|         key = array[i] | ||||
|         j = i - 1 | ||||
|         while j >= 0 and array[j] > key: | ||||
|             array[j + 1] = array[j] | ||||
|             j -= 1 | ||||
|         array[j + 1] = key | ||||
|     return array | ||||
|  | ||||
| def total_sum(array): | ||||
|     if isinstance(array[0], int):   | ||||
|         return sum(array) | ||||
|     return sum(total_sum(subarray) for subarray in array)  # Si tableau multidimensionnel | ||||
|  | ||||
|  | ||||
| def sort_with_sum(array): | ||||
|     for i in range(1, len(array)): | ||||
|         key = array[i] | ||||
|         key_sum = total_sum(key) | ||||
|         j = i - 1 | ||||
|         # Réorganise les sous-tableaux en fonction de leur somme | ||||
|         while j >= 0 and total_sum(array[j]) > key_sum: | ||||
|             array[j + 1] = array[j] | ||||
|             j -= 1 | ||||
|         array[j + 1] = key | ||||
|          | ||||
|     return  array | ||||
|      | ||||
|  | ||||
|  | ||||
| def sort_nd_array(array): | ||||
|     # Si le tableau est de dimension 1, tri simple par insertion | ||||
|     if isinstance(array[0], int): | ||||
|         return insertion_sort(array) | ||||
|  | ||||
|     # Si le tableau est multidimensionnel, on trie récursivement les sous-tableaux | ||||
|     sorted_subarrays = [sort_nd_array(subarray) for subarray in array] | ||||
|  | ||||
|     sorted_subarrays = sort_with_sum(sorted_subarrays) | ||||
|  | ||||
|     return sorted_subarrays | ||||
|  | ||||
|  | ||||
| def print_nd_array(array, level=0): | ||||
|     """ | ||||
|     Affiche un tableau N-dimensionnel de manière lisible. | ||||
|     """ | ||||
|     if isinstance(array[0], int):  # Si tableau 1D   | ||||
|         print("  " * level + str(array)) | ||||
|     else:  # Tableau multidimensionnel | ||||
|         print("  " * level + "[") | ||||
|         for subarray in array: | ||||
|             print_nd_array(subarray, level + 1) | ||||
|         print("  " * level + "]") | ||||
|  | ||||
|  | ||||
| def main(): | ||||
|     # Exemple 1 : Tableau 2D | ||||
|     array_2d = [[0, 3, 2], [9, 4, 5], [4, 1, 3]] | ||||
|     print("Tableau 2D avant tri :") | ||||
|     print_nd_array(array_2d) | ||||
|     result_2d = sort_nd_array(array_2d) | ||||
|     print("Tableau 2D après tri :") | ||||
|     print_nd_array(result_2d) | ||||
|  | ||||
|     # Exemple 2 : Tableau 3D | ||||
|     array_3d = [ | ||||
|         [[3, 1], [4, 2], [1, 3]], | ||||
|         [[5, 7], [2, 8], [9, 4]], | ||||
|         [[0, 0], [1, 1], [1, 0]] | ||||
|     ] | ||||
|     print("\nTableau 3D avant tri :") | ||||
|     print_nd_array(array_3d) | ||||
|     result_3d = sort_nd_array(array_3d) | ||||
|     print("Tableau 3D après tri :") | ||||
|     print_nd_array(result_3d) | ||||
|  | ||||
|     # Exemple 3 : Tableau 4D | ||||
|     array_4d = [ | ||||
|         [ | ||||
|             [[1, 3], [4, 5], [2, 2]], | ||||
|             [[7, 8], [5, 6], [3, 4]] | ||||
|         ], | ||||
|         [ | ||||
|             [[9, 1], [6, 7], [8, 3]], | ||||
|             [[2, 5], [7, 3], [9, 9]] | ||||
|         ], | ||||
|         [ | ||||
|             [[3, 3], [2, 1], [5, 6]], | ||||
|             [[4, 2], [8, 7], [3, 9]] | ||||
|         ] | ||||
|     ] | ||||
|     print("\nTableau 4D avant tri :") | ||||
|     print_nd_array(array_4d) | ||||
|     result_4d = sort_nd_array(array_4d) | ||||
|     print("Tableau 4D après tri :") | ||||
|     print_nd_array(result_4d) | ||||
|      | ||||
| if __name__ == "__main__": | ||||
|     main() | ||||
		Reference in New Issue
	
	Block a user