« Implémentation d'algorithmes classiques/Algorithmes de tri/Tri rapide » : différence entre les versions

Contenu supprimé Contenu ajouté
m Formatage, ajout de code
DannyS712 (discussion | contributions)
m <source> -> <syntaxhighlight> (phab:T237267)
Ligne 2 :
Une mise en œuvre simple de QuickSort sur un tableau d'entiers en C :
 
<sourcesyntaxhighlight lang="c">
int partitionner(int *tableau, int p, int r) {
int pivot = tableau[p], i = p-1, j = r+1;
Ligne 31 :
}
}
</syntaxhighlight>
</source>
 
== [[Programmation Fortran|Fortran 95]] ==
Une mise en oeuvre de quicksort sur un tableau de réels en Fortran, utilisant une fonction récursive. La liste à trier est stockée dans InList, et le résultat renvoyé dans OutList. L'utilisation de tableaux de taille implicite est ici un plus pour éviter les erreurs de segmentation lors de l'exécution.
 
<sourcesyntaxhighlight lang='fortran'>
recursive function QuickSort(InList) result(OutList)
REAL,DIMENSION(:) :: InList
Ligne 79 :
end if
end function QuickSort
</syntaxhighlight>
</source>
 
== [[Programmation Haskell|Haskell]] ==
Une implémentation au langage fonctionnel Haskell :
<sourcesyntaxhighlight lang="Haskell">
qSort :: Ord a => [a] -> [a]
qSort [] = []
Ligne 93 :
| m == x = separer m xs (i,x:e,s)
| otherwise = separer m xs (i,e,x:s)
</syntaxhighlight>
</source>
 
La fonction pourrait être améliorée par un pivot tiré au hasard.
Ligne 99 :
Une version plus courte :
 
<sourcesyntaxhighlight lang="haskell">
quicksort :: (Ord a) => [a] -> [a]
quicksort [] = []
Ligne 105 :
[pivot] ++
(quicksort [y| y<-rest,y>=pivot])
</syntaxhighlight>
</source>
 
== [[Programmation Java|Java]] (ou [[Programmation C sharp|C Sharp]]) ==
Une mise en œuvre simple de QuickSort (d'une manière récursive) sur un tableau d'entiers en Java ou en C Sharp :
 
<sourcesyntaxhighlight lang="java">
public static void quicksort(int [] tableau, int début, int fin) {
if (début < fin) {
Ligne 135 :
return d;
}
</syntaxhighlight>
</source>
 
== [[Programmation Javascript|Javascript]] ==
Ligne 141 :
Le pivot est toujours le premier élément du sous-tableau fourni à la procédure de partitionnement.
 
<sourcesyntaxhighlight lang="javascript">
var t = [ ... ]; // le tableau est une variable globale
 
Ligne 167 :
return d;
}
</syntaxhighlight>
</source>
 
== [[Programmation Lisp|LISP]] ==
<sourcesyntaxhighlight lang="lisp">
(defun sort-gen (liste &optional (predicat #'<))
"Fonction de tri rapide généralisé"
Ligne 178 :
(t (append (sort-gen (remove-if-not (lambda (x) (funcall predicat x (car liste))) liste) predicat)
(sort-gen (remove-if (lambda (x) (funcall predicat x (car liste))) liste) predicat)))))
</syntaxhighlight>
</source>
 
== [[Objective Caml|OCaml]] ==
Ligne 184 :
Implémentation du tri rapide en Objective Caml en utilisant les listes chainées. Le pivot choisi dans cette implémentation est toujours le premier élément de la liste.
 
<sourcesyntaxhighlight lang="Ocaml">
let rec qsort = function
[] -> []
Ligne 190 :
qsort petits @ [pivot] @ qsort grands
(* Type de List.partition : ('a -> bool) -> 'a list -> 'a list * 'a list *)
</syntaxhighlight>
</source>
 
La fonction <code>List.partition</code> sépare une liste en deux listes <code>petits</code> (éléments inférieurs au pivot) et <code>grands</code> (éléments supérieurs ou égaux au pivot).
On aurait pu définir et utiliser une fonction partition pour le cas particulier du tri rapide :
<sourcesyntaxhighlight lang="Ocaml">
(* Type de partition : 'a -> 'a list -> 'a list * 'a list *)
let partition pivot liste =
Ligne 203 :
else partitionR listePlusPetit (tete :: listePlusGrand) queue
in partitionR [] [] liste
</syntaxhighlight>
</source>
 
== [[Programmation Pascal|Pascal]] ==
Ligne 209 :
Une mise en œuvre simple de QuickSort sur un tableau d'entiers en [[Pascal (langage)|Pascal]] :
 
<sourcesyntaxhighlight lang="pascal">
const MAX_VAL = 200;
 
Ligne 260 :
end;
end;
</syntaxhighlight>
</source>
 
== [[Programmation PHP|PHP]] ==
Ligne 266 :
Le pivot est toujours le premier élément du sous-tableau fourni à la procédure de partitionnement.
 
<sourcesyntaxhighlight lang="php">
$t = array( ... ); // le tableau est une variable globale
Ligne 294 :
return $d;
}
</syntaxhighlight>
</source>
 
== Prolog ==
<sourcesyntaxhighlight lang="prolog">
qsort([X|L],R,R0) :-
partition(L,X,L1,L2),
Ligne 307 :
partition([Y|L],X,L1,[Y|L2]) :- Y>X, partition(L,X,L1,L2).
partition([],_,[],[]).
</syntaxhighlight>
</source>
 
== [[Programmation Python|Python]] ==
Ligne 313 :
Ici, nous avons une implémentation en Python, qui utilise un meilleur partitionnement :
 
<sourcesyntaxhighlight lang="python">
def partition(array, start, end, compare):
while start < end:
Ligne 340 :
quicksort(array, compare, start, i)
quicksort(array, compare, i+1, end)
</syntaxhighlight>
</source>
 
== Ruby ==
<sourcesyntaxhighlight lang="ruby">
def qsort tab
if tab.size < 2 then tab else
Ligne 350 :
end
end
</syntaxhighlight>
</source>
 
<small>Tout ou partie de cette page est issue de l'article Wikipédia « [[w:Tri rapide|Tri rapide]] » dans sa [{{fullurl:w:Tri_rapide|oldid=52570963}} version du 27/04/2010].</small>