Implémentation de l'algorithme de tri PHP Hill (Shell) (explication détaillée du code)

藏色散人
Libérer: 2023-04-05 14:18:02
original
3734 Les gens l'ont consulté

Le tri Hill (Shell) ou méthode Shell est un tri par comparaison sur place. Cela peut être vu comme une généralisation du tri à bulles ou du tri par insertion. Cette méthode trie d’abord les paires d’éléments éloignés les uns des autres, puis réduit progressivement l’écart entre les éléments à comparer. Commencer par des éléments éloignés les uns des autres vous permet de déplacer certains éléments déplacés plus rapidement que l'échange de voisins.

Implémentation de l'algorithme de tri PHP Hill (Shell) (explication détaillée du code)

L'exemple de tri de shell est le suivant :

Implémentation de lalgorithme de tri PHP Hill (Shell) (explication détaillée du code)

Le premier parcours est "5 tri " , effectuez un tri par insertion sur différents sous-tableaux (a1, a6, a11), (a2, a7, a12), (a3, a8), (a4, a9), (a5, a10). Par exemple, cela modifie le sous-tableau (a1, a6, a11) de (62,17,25) à (17,25,62).

Puis "3 tri", effectuez un tri par insertion sur les sous-tableaux (a1, a4, a7, a10), (a2, a5, a8, a11), (a3, a6, a9, a12).

La dernière fois est "1 tri", qui correspond à l'ensemble du tableau (a1,...,a12). Comme le montre l'exemple, les sous-tableaux des opérations de tri Shell sont initialement très courts ; puis ils deviennent plus longs, mais ils sont fondamentalement ordonnés. Dans les deux cas, le tri par insertion fonctionne. Le tri du shell est instable : il peut modifier l'ordre relatif des éléments de valeurs égales. Il s'agit d'un algorithme de tri adaptatif qui s'exécute plus rapidement lorsque l'entrée est partiellement triée.

Le graphique de tri Hill (Shell) est le suivant :

Implémentation de lalgorithme de tri PHP Hill (Shell) (explication détaillée du code)

Exemple de code de PHP implémentant l'algorithme de tri Shell (Shell) :

<?php
function shell_Sort($my_array)
{
    $x = round(count($my_array)/2);
    while($x > 0)
    {
        for($i = $x; $i < count($my_array);$i++){
            $temp = $my_array[$i];
            $j = $i;
            while($j >= $x && $my_array[$j-$x] > $temp)
            {
                $my_array[$j] = $my_array[$j - $x];
                $j -= $x;
            }
            $my_array[$j] = $temp;
        }
        $x = round($x/2.2);
    }
    return $my_array;
}

$test_array = array(3, 0, 2, 5, -1, 4, 1);
echo "原始数组 :\n";
echo implode(&#39;, &#39;,$test_array );
echo "\n排序后数组\n:";
echo implode(&#39;, &#39;,shell_Sort($test_array)). PHP_EOL;
Copier après la connexion

Sortie :

原始数组 : 3, 0, 2, 5, -1, 4, 1 
排序后数组 :-1, 0, 1, 2, 3, 4, 5
Copier après la connexion

Cet article est une introduction à l'algorithme de tri PHP Hill (Shell). Il est simple et facile à comprendre. aux amis dans le besoin !

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal