Insertar la clasificación es eficiente cuando se operan en datos casi clasificados, es decir, se puede lograr la eficiencia de la clasificación lineal.
Pero la clasificación de inserción es generalmente ineficiente porque la clasificación de inserción solo puede mover los datos uno por uno a la vez.
Hill Sorting lleva el nombre de su diseñador Donald Shell, un algoritmo publicado en 1959. Algunos viejos libros de texto y manuales de referencia llamaron al algoritmo Shell-Metzner, que contiene el nombre Marlene Metzner Norton, pero según el propio Metzner, "No hice nada por este algoritmo, mi nombre no debería aparecer en el algoritmo. En nombre de
La idea básica de la clasificación de las colinas: primero tome un entero D1 más pequeño que n como el primer incremento, y divida todos los registros del archivo en grupos de D1. Todos los registros con múltiplos de distancia D1 se colocan en el mismo grupo. Primero realice la clasificación de inserción directa en cada grupo; Los registros se colocan en el mismo grupo y se ordenan directamente.
Este método es esencialmente un método de inserción de agrupación.
Ejemplo 1:
La copia del código es la siguiente:
/**
* La clasificación de la colina, también conocida como algoritmo de clasificación incremental decreciente, es una versión más eficiente y mejorada de la clasificación de inserción. La clasificación de la colina es un algoritmo de clasificación no estable.
*
* La clasificación de la colina propone un método mejorado basado en las siguientes dos propiedades de la clasificación de inserción:
*
* Insertar la clasificación es eficiente cuando se opera en datos casi clasificados, lo que significa que se puede lograr la eficiencia de la clasificación lineal.
* Pero el tipo de inserción es generalmente ineficiente, porque el tipo de inserción solo puede mover datos de uno a la vez.
*
*/
function shellsort (list) {
var gap = math.floor (list.length / 2);
while (gap> 0) {
para (i = gap; i <list.length; i ++) {
temp = list [i];
for (j = i; j> = gap && list [j - gap]> temp; j - = gap) {
list [j] = list [j - gap];
}
Lista [j] = temp;
}
GAP = MATH.FLOOR (GAP / 2);
}
lista de devolución;
};
// prueba
var arr = [2, 1, 3, 12, 5, 66, 23, 87, 15, 32];
shellsort (arr);
Ejemplo 2:
La copia del código es la siguiente:
<script type = "text/javaScript">
//document.write("------------------------------------------ -------------------------------------------------- ------------------------- N al poder de 1.3 -------- ");
//document.write("<br /> <Br /> ")
// Var Array = nueva matriz (12, 25, 32, 16, 18, 27, 59, 69, 36);
function shellsort (array) {
var j, i, v, h = 1, s = 3, k, n = array.length;
resultado var = "";
Var Count = 0;
mientras (h <n)
H = S*H+1;
while (h> 1) {
H = (H-1)/S;
para (k = 0; k <h; k ++)
para (i = k+h, j = i; i <n; i+= h, j = i) {
v = matriz [i];
Mientras (verdadero)
if ((j- = h)> = 0 && array [j]> v)
matriz [j+h] = array [j];
demás
romper;
matriz [j+h] = v;
}
contar ++;
Result + = "<Br /> Hilo" + Count + "El resultado del ordenar a través del pase es:";
para (var n = 0; n <array.length; n ++) {
resultado + = array [n] + ",";
}
}
resultado de retorno;
}
// ShallSort (matriz);
//document.write("<br /> <Br /> ");
</script>