TutorielsVous débutez ? C'est ici qu'on commence !
Mon compte
Recherche
Livre d'or
PublicitéVous devez être inscrit pour pouvoir poster des messages
| Page : 1 | |||||
| Pseudo | Commentaire | ||||
|---|---|---|---|---|---|
| Page : 1 | |||||
bluestorm
|
# Posté le 21/06/2007 à 17:51:34 - Ce membre n'a pas mis de note | ||||
dont ask to ask![]() Groupe : Membres |
Un qsort simpe sur des listes, en OCaml :
Code : Ocaml let rec qsort liste = match liste with
[] | _::[] -> liste | pivot::reste -> let debut, fin = List.partition (fun a -> a < pivot) reste in qsort debut @ [pivot] @ qsort fin Version générique : Code : Ocaml let qsort ( < ) liste =
let rec sort li = match li with [] | _::[] -> li | pivot::reste -> let debut, fin = List.partition (fun a -> a < pivot) reste in sort debut @ [pivot] @ sort fin in sort liste |
||||
Nanoc
|
# Posté le 27/06/2007 à 19:50:05 - Ce membre a mis la note : 16 | ||||
Apprenez à utiliser la STL !!![]() Groupe : Membres |
Hello, bon tuto, clair et précis.
Cependant j'aurais ajouté le fait que la fonction sort de la librairie <algorithm> de la STL le fait (pou ceux qui codent en C++), vu que tu l'as mis pour le C. Exercices de C++ pour tous les niveaux ! Mes tutos: Tri de Shell --- [C++] Manipulateurs de flux --- [C++] Notions avancées (suite du cours de M@teo21) |
||||
elmcherqui
|
# Posté le 06/02/2008 à 03:30:26 - Ce membre n'a pas mis de note | ||||
la vie est un programme![]() Groupe : Membres |
tres bon le tuto . 17/20 , pasque j'aurait prefere que le code soit ecrit en C .
-La répétition est humaine , la récurrence Divine . |
||||
freecircus
|
# Posté le 17/10/2008 à 21:42:28 - Ce membre n'a pas mis de note | ||||
"Se coucher tard nuit"![]() Groupe : Membres |
hm... après presque 8000 visualisations j'ai des doutes mais, l'implémentation C ne serait-t-elle pas buguée ? Secret (cliquez pour afficher) Code : C
Code : Console
En passant, on voit deux licences contradictoire je crois. |
||||
Panpan
|
# Posté le 16/11/2008 à 17:25:44 - Ce membre n'a pas mis de note | ||||
|
Groupe : Membres |
Juste une remarque sur le code en C, pourquoi écrire un "while(1)" qui contient un break conditionnel ? Les parenthèses sont là pour exprimer une condition de sortie. Si ton but est de t'assurer que la boucle soit parcourue au moins une fois, do...while est là pour ça. Ca ne compromet pas l'interêt de ton tuto, mais sur un site parcouru par beaucoup de débutants, autant ne pas trop écrire de "bizarreries" dans les codes fournis. |
||||
Pole
|
# Posté le 16/11/2008 à 21:26:30 - Ce membre n'a pas mis de note | ||||
Chieur professionnel![]() Groupe : Membres |
Citation Lors des appels récursifs, trier d'abord le sous-tableau le plus long et ensuite le sous-tableau le moins long. C'est juste un test de plus, et ça peut accélerer le tri (ne me demandez pas pourquoi...) Récursion terminale probablement (faire ça garantit une pile de taille O(ln(N)) dans tous les cas). Citation Mélanger le tableau aléatoirement avant de le trier. Ça paraît débile, mais QSort adore les tableaux bien mélangés et a horreur de ceux déjà presque triés. En utilisant un mélange avant QSort, on augmente les chances d'avoir une liste très désordonnée. Il est plus simple de prendre un pivot au hasard. Freecircus : il faut effectivement trier récursivement de debut à gauche-1 et de gauche à fin. |
||||
GuilOooo
|
# Posté le 27/11/2008 à 20:23:26 - Ce membre n'a pas mis de note | ||||
PriPrOTtTt§!!!§![]() Groupe : Membres |
Freecircus/Pole : Corrigé en local, merci. Effectivement, c'est resté longtemps inapperçu. Vu que mon tuto est déjà apparu dans la box de la page d'acceuil récemment, j'hésite à le « upper » encore une fois pour une seule ligne, cependant... Pole : Je pense que c'est du tail-rec ausi, mais j'ai de fortes chances de dire n'importe quoi si j'explique ça. Et pour prendre un pivot au hasard, est-ce que ça règle le problème aussi bien ? Panpan, il est vrai que c'est une bizarrerie, mais, quand j'ai rédigé le tuto, cette version m'a paru plus « sémantique » : on fait ceci et celà, puis si on a pas fini, on permute, sinon, on sort de la boucle (je voulais faire apparaître le : sinon, on seort de la boucle). Ma série d'articles « Paradigmes » : Intro - Impératif OpenCola, la seule boisson open-source au monde ! |
||||
yoch
|
# Posté le 30/11/2008 à 01:50:42 - Ce membre n'a pas mis de note | ||||
![]() Groupe : Membres |
Citation : GuilOooo Freecircus/Pole : Corrigé en local, merci. Vérifies bien ta correction. Je préconise de tester sur au moins trois types de tableaux (de grande taille, de préférence) :
Citation : GuilOooo Et pour prendre un pivot au hasard, est-ce que ça règle le problème aussi bien ? Logiquement, cela devrait. Citation : Wikipédia Le problème le plus important est le choix du pivot. Une implémentation du tri rapide qui ne choisit pas adéquatement le pivot sera très inefficace pour certaines entrées. Par exemple, si le pivot est toujours le plus petit élément de la liste, QuickSort sera aussi efficace qu'un tri par sélection, c'est-à-dire de performance O(n²). [...] Des données triées ou partiellement triées sont relativement fréquentes dans la pratique et l'implémentation naïve du tri rapide qui choisit le premier élément comme pivot conduit à une profondeur de récursivité linéaire. Pour résoudre ce problème, on peut utiliser l'élément du milieu du tableau. Cette façon de faire fonctionne bien pour les listes déjà triées ou à l'envers mais facilite la mise au point d'attaques. Citation : GuilOooo - tuto Lors des appels récursifs, trier d'abord le sous-tableau le plus long et ensuite le sous-tableau le moins long. C'est juste un test de plus, et ça peut accélerer le tri (ne me demandez pas pourquoi...) Que veux tu dire ? Wikipédia est bien plus clair, je trouve : Citation : Wikipédia Une autre solution simple pour réduire l'utilisation de la mémoire par un tri rapide utilise une récursion pour la plus petite des sous-listes à trier, et une récursion finale (qui peut donc être transformée en une boucle) pour la plus grande. Ceci limite la quantité de mémoire utilisée a O(log n). Voici un qsort générique que j'ai écrit en C, mettant en application les deux optimisations dont tu parle. Les améliorations ont vraiment été très sensibles a l'exécution :
Code : C
|
||||
Vous devez être inscrit pour pouvoir poster des messages
Changer de design |
En savoir plus |
Plan du site |
Politique d'accessibilité |
Règles |
RSS tutoriels |
RSS news
Édité par Simple IT SARL :
Nous contacter
| Notre blog | Revue de presse | Publicité
Y'a plus rien à lire, faut remonter maintenant !
Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.
429 Zéros connectés |
8 requêtes |
0.0251s (0.0138s)
