De nombreux algorithmes ont été proposés et étudiés pour résoudre le problème du tri, qui se présente fréquemment dans les problèmes de gestion de données : par exemple, on dispose d'un annuaire alphabétique des abonnés au téléphone, et on veut produire un annuaire classé par adresses. On présentera seulement deux algorithmes : le tri par insertion, de type incrémental, et plus loin le tri rapide, de type << diviser pour régner >>.
Le tri par insertion procède de façon incrémentale, à la manière d'un joueur de carte qui range les cartes, au fur et à mesure qu'il les reçoit, à leur place parmi les précédentes.
void tri_insertion(int n, int t[]) { int j; for (j=1; j<n; j++) { int x = t[j]; int i = j-1; // x doit être inséré dans le tableau ordonné 0..j-1 while (i>=0 && t[i]>x) { t[i+1] = t[i]; i = i-1; } t[i+1] = x; } }
La complexité de cet algorithme est en . S'il est facilement utilisable pour des tableaux de taille réduite (), cette complexité est prohibitive pour une utilisation sur de grandes bases de données.