Que donne ceci:
(let ((l '(42 42))) (lowerpart l (pivot l)))
Pour qu'un algorithme récursif ait une chance de terminer (un jour), il faut absolument que les données "diminuent" d'une itération à l'autre...
[EDIT]
Petite remarque: ton algorithme est en O(n*n) alors que quicksort est en O(n*log(n))... ce n'est donc pas quicksort...
Après vérification, ton algorithme est bien quicksort et il est bien en O(n*log(n))!
En effet, au premier "tour", on fait N-1 comparaisons et on obtient 2 listes qui contiennent en tout N éléments.
Aux "tours" suivants (en cumulant ce qui se passe pour chacune des sous-listes), on fait aussi N-1 comparaisons qui conduisent à 4 sous-listes.
Le nombre de "tours" est égal au nombre de fois qu'il faut diviser N par 2 pour n'obtenir que des singletons, ce qui est, dans le meilleur des cas (où, à chaque fois, les 2 moitiés ont plie poil la même taille), justement la définition du log de N en base 2.
Dans le pire des cas, à chaque découpe, on isole un seul élément, ce qui demande donc N-1 étapes pour arriver à des singletons, d'où o(n*n).
[/EDIT]
Dans emacs, as-tu essayé de tuer le buffer? C-x k
Partager