fini
此提交包含在:
		
							
								
								
									
										
											二進制
										
									
								
								TD Yanis Darius.pdf
									
									
									
									
									
										一般檔案
									
								
							
							
						
						
									
										
											二進制
										
									
								
								TD Yanis Darius.pdf
									
									
									
									
									
										一般檔案
									
								
							
										
											未顯示二進位檔案。
										
									
								
							
							
								
								
									
										121
									
								
								ex3_TD4_V2.py
									
									
									
									
									
										一般檔案
									
								
							
							
						
						
									
										121
									
								
								ex3_TD4_V2.py
									
									
									
									
									
										一般檔案
									
								
							| @@ -0,0 +1,121 @@ | |||||||
|  | def heapify(array, n, i): | ||||||
|  |  | ||||||
|  |     largest = i   | ||||||
|  |     left = 2 * i + 1  | ||||||
|  |     right = 2 * i + 2   | ||||||
|  |  | ||||||
|  |     if left < n and array[left] > array[largest]: | ||||||
|  |         largest = left | ||||||
|  |  | ||||||
|  |     if right < n and array[right] > array[largest]: | ||||||
|  |         largest = right | ||||||
|  |  | ||||||
|  |     if largest != i: | ||||||
|  |         array[i], array[largest] = array[largest], array[i]   | ||||||
|  |         heapify(array, n, largest) | ||||||
|  |  | ||||||
|  | def heap_sort(array): | ||||||
|  |     n = len(array) | ||||||
|  |  | ||||||
|  |     # Construire un tas max | ||||||
|  |     for i in range(n // 2 - 1, -1, -1): | ||||||
|  |         heapify(array, n, i) | ||||||
|  |  | ||||||
|  |      | ||||||
|  |     for i in range(n - 1, 0, -1): | ||||||
|  |         array[i], array[0] = array[0], array[i]   | ||||||
|  |         heapify(array, i, 0)   | ||||||
|  |  | ||||||
|  |     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 heap_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() | ||||||
		新增問題並參考
	
	封鎖使用者