Maison >Opération et maintenance >exploitation et maintenance Linux >Algorithme de tri : tri par insertion et tri shell

Algorithme de tri : tri par insertion et tri shell

齐天大圣
齐天大圣original
2020-05-04 10:17:52251parcourir

Aujourd'hui, nous allons parler de deux méthodes de tri classiques, le tri par insertion et le tri par shell. Vous pouvez considérer le tri shell comme une version améliorée du tri par insertion.

Tri par insertion

La description de l'algorithme de tri par insertion est un algorithme de tri très simple et intuitif. Sa complexité est similaire à celle du tri à bulles. Le principe de fonctionnement est de construire une séquence ordonnée. Pour les données non triées, parcourez d'arrière en avant dans la séquence triée pour trouver la position correspondante et insérez-la.

J'ai trouvé une animation sur Internet comme suit :

Algorithme de tri : tri par insertion et tri shell

Le processus est le suivant :

  • De le premier élément Dans un premier temps, l'élément peut être considéré comme ayant été trié

  • Sortir l'élément suivant et scanner d'arrière en avant dans la séquence des éléments triés

  • Si l'élément (trié) est supérieur au nouvel élément, déplacez l'élément à la position suivante

  • Répétez l'étape 3 jusqu'à ce que vous trouviez l'élément trié qui est ; inférieur ou égal à la position du nouvel élément ;

  • Après avoir inséré le nouvel élément dans cette position

  • Répétez les étapes 2 à 5.

Implémentation du code (le langage C est utilisé ici) :

void insort (int arr[], int len)
{
    int i,current,preindex;
    for (i = 1; i < len; i++) {
        preindex = i - 1;
        current = arr[i];
        while (preindex >= 0 && current < arr[preindex]) {
            arr[preindex + 1] = arr[preindex];
            preindex --;
        }
        arr[preindex + 1] = current;
    }
}

tri des shells

Après comprendre le tri par insertion, il est facile de comprendre le tri shell.

L'algorithme de tri Shell a été inventé par D.L. Shell en 1959. Son idée de base est de comparer d'abord des éléments distants, ce qui peut rapidement réduire un grand nombre de situations désordonnées, facilitant ainsi le travail ultérieur. La distance entre les éléments comparés diminue progressivement jusqu'à atteindre 1, moment auquel le tri devient un échange d'éléments adjacents.

Le tri Hill consiste à regrouper les enregistrements selon un certain incrément dans le tableau et à utiliser l'algorithme de tri par insertion directe pour trier chaque groupe à mesure que l'incrément diminue progressivement, chaque groupe contient de plus en plus de mots-clés. est réduit à 1, le fichier entier est divisé en un seul groupe et l'algorithme se termine.

Démonstration du processus (cette image a également été trouvée en ligne) :

Algorithme de tri : tri par insertion et tri shell

Implémentation du code (le langage C est utilisé ici) :

void shell_sort (int arr[], int len)
{
    int gap,i,current,preindex;
    for (gap = len / 2; gap > 0; gap /= 2) {
        for (i = gap; i < len; i++) {
            preindex = i - gap;
            current = arr[i];
            while (preindex >= 0 && current < arr[preindex]) {
                arr[preindex + gap] = arr[preindex];
                preindex -= gap;
            }
            arr[preindex + gap] = current;
        }
    }
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn