47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
|
def bubble_sort(array):
|
||
|
"""
|
||
|
Implémentation du tri à bulles pour un tableau 1D.
|
||
|
"""
|
||
|
n = len(array)
|
||
|
for i in range(n):
|
||
|
for j in range(0, n - i - 1):
|
||
|
if array[j] > array[j + 1]:
|
||
|
array[j], array[j + 1] = array[j + 1], array[j]
|
||
|
|
||
|
|
||
|
def bubble_sort_by_key(array, key_func):
|
||
|
"""
|
||
|
Implémentation du tri à bulles pour un tableau 2D ou supérieur
|
||
|
basé sur une fonction clé.
|
||
|
"""
|
||
|
n = len(array)
|
||
|
for i in range(n):
|
||
|
for j in range(0, n - i - 1):
|
||
|
if key_func(array[j]) > key_func(array[j + 1]):
|
||
|
array[j], array[j + 1] = array[j + 1], array[j]
|
||
|
|
||
|
|
||
|
def sort_nd_array(array):
|
||
|
"""
|
||
|
Trie récursivement un tableau multidimensionnel.
|
||
|
"""
|
||
|
if isinstance(array[0], list):
|
||
|
# Trier récursivement chaque sous-dimension
|
||
|
for sub_array in array:
|
||
|
sort_nd_array(sub_array)
|
||
|
# Trier cette dimension en fonction de la somme des sous-tableaux
|
||
|
bubble_sort_by_key(array, key_func=lambda x: sum(sum(y) if isinstance(y, list) else y for y in x))
|
||
|
else:
|
||
|
# Si c'est un tableau 1D, appliquer le tri à bulles
|
||
|
bubble_sort(array)
|
||
|
|
||
|
|
||
|
# Exemple pour un tableau 2D
|
||
|
array_2d = [[0, 3, 2], [9, 4, 5], [4, 1, 3]]
|
||
|
sort_nd_array(array_2d)
|
||
|
print("Tableau trié 2D :", array_2d) # Résultat attendu : [[0, 2, 3], [1, 3, 4], [4, 5, 9]]
|
||
|
|
||
|
# Exemple pour un tableau 3D
|
||
|
array_3d = [[[3, 2], [1, 4]], [[9, 8], [2, 1]], [[5, 5], [3, 3]]]
|
||
|
sort_nd_array(array_3d)
|
||
|
print("Tableau trié 3D :", array_3d)
|