static void échangerÉléments(int[] t, int m, int n) { int temp = t[m]; t[m] = t[n]; t[n] = temp; } static int partition(int[] t, int m, int n) { int v = t[m]; // valeur pivot int i = m-1; int j = n+1; // indice final du pivot while (true) { do { j--; } while (t[j] > v); do { i++; } while (t[i] < v); if (i<j) { échangerÉléments(t, i, j); } else { return j; } } } static void triRapide(int[] t, int m, int n) { if (m<n) { int p = partition(t, m, n); triRapide(t, m, p); triRapide(t, p+1, n); } }
La fonction partition(), qui est pourtant itérative, est la partie difficile à écrire : celle-ci choisit comme pivot le premier élément de chaque tableau. Sa complexité est en . Testé sur trois tableaux de taille 1000 dont les éléments sont respectivement, générés aléatoirement, générés par ordre croissant, générés par ordre décroissant, le nombre d'échanges d'éléments observé est respectivement : 5477, 999, et 250 999. On montre en effet, sous des hypothèses d'uniformité, que la complexité moyenne du tri rapide est en ; en pratique, son comportement est même meilleur que celui du tri par fusion (car la constante devant est plus petite). Mais comme il n'y aucune raison pour que la partition décompose une table de longueur n en deux tables de longueur n/2, la complexité dans le pire des cas est très mauvaise, puisqu'elle est en n2.