forked from menault/TD4_DEV51_Qualite_Algo
fini
This commit is contained in:
parent
59148c55de
commit
e370d80dc7
BIN
TD Yanis Darius.pdf
Normal file
BIN
TD Yanis Darius.pdf
Normal file
Binary file not shown.
121
ex3_TD4_V2.py
Normal file
121
ex3_TD4_V2.py
Normal file
@ -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()
|
Loading…
Reference in New Issue
Block a user