Bonjour tout le monde,
encore moi avec mes algorithme de tri ...
J'ai réussi à implémenter le tri par pivot (plus connu sous le nom de tri rapide), ainsi que le tri par fusion . Bon les codes sont un peu long, j'avoue. J'ai vu les solutions de mon professeur, elles font 8 lignes maxi .... Ca, c'est pas le problème, puisqu'on nous a expliqué que les solutions données étaient le fruit de plusieurs années de réflexion et que nous n'avions pas à proposer de telles implémentations (du coup on nous donne une solution, mais si on a pas la notre, c'est même pas la peine ...)!
Mes solutions ont été testé, et elles fonctionnent ! Il y a juste un truc qui m'ennuie un peu :
J'ai du mettre des "coupe-choix" après la plupart des "buts" (est-ce le bon mot ? jai pas mon cours de logique sous la main) ou plutot des conditions d'arret pour avoir unicité de la réponse(sinon, une infinité de fois la même réponse ... ). J'aimerai bien avoir l'unicité sans les coupe-choix. J'ai bien essayé de suivre avec le debugger intégré a swi, mais sans succès.
Voici mon code (celui de tri par pivot est moins long, pour ne pas encombrer le forum je ne met que celui là, en supposant que si je comprends pour ce code, ....) :
Si vous voulez des commentaires ou d'autres choses, faîtes le moi savoir. Merci,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 % Tri rapide quicksort([],[]). quicksort([X],[X]) :- !. quicksort([X|Xs],Y) :- % on casse la liste en deux et on la trie qsplit([X|Xs],L1,L2), append(L1,[X],L1f), % on lance la recursivite sur les deux listes obtenues quicksort(L1f,L1s), quicksort(L2,L2s), % on concatene les deux listes triees append(L1s,L2s,Y). % construction des listes avec le premier element comme pivot qsplit([],[],[]). qsplit([_],[],[]). qsplit([X1,X2|Xs],Y,Z) :- qsplit([X1|Xs],Ys,Z), X1>X2,!, append(Ys,[X2],Y). qsplit([X1,X2|Xs],Y,Z) :- qsplit([X1|Xs],Y,Zs), append(Zs,[X2],Z).
au revoir.
Partager