A inserção de classificação é eficiente ao operar em dados quase classificados, ou seja, a eficiência da classificação linear pode ser alcançada.
Mas a classificação de inserção geralmente é ineficiente porque a classificação de inserção só pode mover os dados um por um de cada vez.
A Hill Strating recebeu o nome de seu designer Donald Shell, um algoritmo publicado em 1959. Alguns livros antigos e manuais de referência nomearam o algoritmo Shell-Metzner, que contém o nome Marlene Metzner Norton, mas de acordo com o próprio Metzner, "não fiz nada por esse algoritmo, meu nome não deve aparecer no algoritmo. No nome do nome de
A idéia básica da classificação da colina: primeiro pegue um número inteiro D1 menor que N como o primeiro incremento e divida todos os registros do arquivo em grupos de D1. Todos os registros com múltiplos de distância D1 são colocados no mesmo grupo. Primeiro execute a classificação de inserção direta em cada grupo; Os registros são colocados no mesmo grupo e classificados diretamente.
Este método é essencialmente um método de inserção de agrupamento.
Exemplo 1:
A cópia do código é a seguinte:
/**
* Classificação da colina, também conhecida como algoritmo de classificação incremental decrescente, é uma versão mais eficiente e aprimorada da classificação de inserção. A classificação de montanhas é um algoritmo de classificação não estável.
*
* Hill Strating propõe um método aprimorado com base nas duas propriedades a seguir da classificação de inserção:
*
* A classificação Inserir é eficiente ao operar em dados quase classificados, o que significa que a eficiência da classificação linear pode ser alcançada.
* Mas a classificação de inserção geralmente é ineficiente, porque a classificação da inserção só pode mover dados por um de cada vez.
*
*/
função shellsort (list) {
var gap = math.floor (list.length / 2);
while (Gap> 0) {
for (i = gap; i <list.length; i ++) {
temp = lista [i];
for (j = i; j> = gap && list [j - gap]> temp; j - = gap) {
lista [j] = lista [j - gap];
}
lista [j] = temp;
}
gap = math.floor (gap / 2);
}
lista de retorno;
};
// teste
var arr = [2, 1, 3, 12, 5, 66, 23, 87, 15, 32];
Shellsort (arr);
Exemplo 2:
A cópia do código é a seguinte:
<script type = "text/javascript">
//document.write("-------------------------------------------- -------------------------------------------------------- --------------------------- N ao poder de 1.3 -------- ");
//document.write("<BR /> <BR /> ")
// var array = nova matriz (12, 25, 32, 16, 18, 27, 59, 69, 36);
Função ShellSort (Array) {
var j, i, v, h = 1, s = 3, k, n = array.length;
var resultado = "";
var count = 0;
while (h <n)
h = s*h+1;
while (h> 1) {
h = (h-1)/s;
para (k = 0; k <h; k ++)
for (i = k+h, j = i; i <n; i+= h, j = i) {
v = array [i];
Enquanto (verdadeiro)
if ((j- = h)> = 0 && Array [j]> V)
matriz [j+h] = matriz [j];
outro
quebrar;
matriz [j+h] = v;
}
contagem ++;
resultado + = "<br /> thread" + count + "O resultado da ordem através do passe é:";
for (var n = 0; n <array.length; n ++) {
resultado + = array [n] + ",";
}
}
resultado de retorno;
}
// de vida (matriz);
//document.write("r /> <r /> ");
</script>