L'insertion de tri est efficace lors du fonctionnement sur des données presque triées, c'est-à-dire que l'efficacité du tri linéaire peut être obtenue.
Mais le tri de l'insertion est généralement inefficace car le tri de l'insertion ne peut que déplacer les données une à un par un.
Hill Tri est nommé d'après son concepteur Donald Shell, un algorithme publié en 1959. Certains vieux manuels et manuels de référence ont nommé l'algorithme Shell-Metzner, qui contient le nom de Marlene Metzner Norton, mais selon Metzner lui-même, "Je n'ai rien fait pour cet algorithme, mon nom ne devrait pas apparaître dans l'algorithme.
L'idée de base du tri des collines: prenez d'abord un entier D1 plus petit que n comme premier incrément, et divisez tous les enregistrements du fichier en groupes de D1. Tous les enregistrements avec des multiples de distance D1 sont placés dans le même groupe. Effectuez d'abord le tri d'insertion directe dans chaque groupe; ensuite, prenez le deuxième incrément D2 <D1 et répétez le groupe et le tri ci-dessus jusqu'à ce que l'incrément DT = 1 soit pris (DT <dt-l <… <d2 <d1), c'est-à-dire, tout Les enregistrements sont placés dans le même groupe et triés directement.
Cette méthode est essentiellement une méthode d'insertion de regroupement.
Exemple 1:
La copie de code est la suivante:
/ **
* Le tri des collines, également connu sous le nom d'algorithme de tri incrémentiel décroissant, est une version plus efficace et améliorée du tri des insert. Hill Tri est un algorithme de tri non stable.
*
* Le tri des collines propose une méthode améliorée basée sur les deux propriétés suivantes du tri des insert:
*
* Le tri des insert est efficace lors du fonctionnement sur des données presque triées, ce qui signifie que l'efficacité du tri linéaire peut être obtenue.
* Mais le tri de l'insertion est généralement inefficace, car le tri de l'insertion ne peut déplacer que des données par une à la fois.
*
* /
fonction shellSort (list) {
var gap = math.floor (list.length / 2);
tandis que (écart> 0) {
for (i = gap; i <list.length; i ++) {
temp = list [i];
pour (j = i; j> = gap && list [J - GAP]> temp; j - = gap) {
list [j] = list [J - GAP];
}
list [j] = temp;
}
GAP = math.floor (GAP / 2);
}
Liste de retour;
};
// test
var arr = [2, 1, 3, 12, 5, 66, 23, 87, 15, 32];
ShellSort (arr);
Exemple 2:
La copie de code est la suivante:
<script type = "text / javascript">
//Document.write("------------------------------------------ -------------------------------------------------- ------------------------- N à la puissance de 1.3 -------- ");
//Document.write("<br /> <br /> ")
// Var Array = Nouveau tableau (12, 25, 32, 16, 18, 27, 59, 69, 36);
fonction shellSort (array) {
var j, i, v, h = 1, s = 3, k, n = array.length;
var result = "";
Var Count = 0;
tandis que (h <n)
H = S * H + 1;
tandis que (h> 1) {
h = (h-1) / s;
pour (k = 0; k <h; k ++)
pour (i = k + h, j = i; i <n; i + = h, j = i) {
v = array [i];
Tandis que (vrai)
if ((j- = h)> = 0 && array [j]> v)
Array [J + H] = Array [J];
autre
casser;
Array [J + H] = V;
}
count ++;
Résultat + = "<br /> Thread" + Count + "Le résultat de la commande via le pass est:";
pour (var n = 0; n <array.length; n ++) {
résultat + = array [n] + ",";
}
}
Résultat de retour;
}
// doit (tableau);
//Document.write("<br /> <br /> ");
</cript>