Vous pourriez envisager une implémentation plus simple du tri rapide. Par exemple,
my_list = [52,8,45,43,6,56,76,36,54,12,34,98,41,30]
def quicksort(arr):
high = []
low = []
pivot_list = []
if len(arr) <= 1:
return arr
else:
pivot = arr[0]
for i in arr:
if i < pivot:
low.append(i)
elif i > pivot:
high.append(i)
else:
pivot_list.append(i)
high = quicksort(high)
low = quicksort(low)
return low + pivot_list + high
print quicksort(my_list)
[6, 8, 12, 30, 34, 36, 41, 43, 45, 52, 54, 56, 76, 98]
Cette implémentation plutôt simple est facile à expliquer. Vous partitionnez une liste en fonction d'un choix arbitraire du pivot. Dans ce cas arr[0] = 52
. Vous parcourez alors la liste et si l'élément est supérieur au pivot (52), vous le placez dans la partition «haute» et, s'il est inférieur à 52, vous le placez dans la partition «basse». A ce stade, après une course à travers (avant que nous courons high = quicksort(high)
), nous avons
low = [8, 45, 43, 6, 36, 12, 34, 41, 30]
high = [56, 76, 54, 98]
pivot_list = [52]
Nous courons alors cette fonction de tri rapide sur les partitions « faible » et « élevé ». Par exemple, pour la partition haute, pivot = arr[0] = 56
. Nous itérons à travers la partition haute, et si l'élément est inférieur au pivot (56), nous le mettons dans un nouveau groupe de partition faible qui est un sous-groupe de la partition haute. Si l'élément est supérieur à 56, nous le plaçons dans une partition haute qui est un sous-groupe de la partition haute. Vous pouvez le considérer comme commençant par une liste que l'on veut trier et bifurquer dans une partition haute et une partition basse qui ensuite se branche sur ses propres partitions hautes et basses. C'est là que la récursion entre