La clasificación Hill funciona bien para la clasificación de matrices de tamaño mediano de hasta varios miles de elementos de datos. La clasificación Hill no es tan rápida como la clasificación rápida y otros algoritmos de clasificación con una complejidad temporal de O (n * logn). No es la opción óptima para ordenar archivos muy grandes, pero la clasificación Hill es mucho más rápida que la clasificación por selección y la clasificación por inserción, que tienen una complejidad temporal de O (n²), es muy fácil de implementar y el código es corto.
La clasificación Hill también es una especie de clasificación por inserción. En la clasificación por inserción, si el número más pequeño está al final, Hill resuelve este problema. Su idea es aumentar el espacio entre ellas. elementos en la clasificación por inserción y al realizar la clasificación por inserción entre estos elementos espaciados, cuando estos elementos de datos se clasifican una vez, el algoritmo de clasificación Hill reduce el espacio entre los elementos de datos y luego los clasifica, y así sucesivamente. El espacio entre elementos de datos al realizar esta clasificación se denomina incremento y se representa convencionalmente con la letra h.
Para una matriz que está a punto de ser ordenada por Hill, el intervalo inicial debe ser mayor y luego el intervalo debe reducirse continuamente hasta que el intervalo se convierta en 1.
Secuencia espaciadora:
La calidad de los números en secuencias espaciadas a menudo se considera importante: no tienen divisores comunes distintos de 1. Esta restricción hace que sea más probable que cada pasada de clasificación conserve el efecto de la pasada anterior. Para diferentes secuencias espaciadas, existe un absoluto. La condición es que el intervalo que disminuye gradualmente debe ser finalmente igual a 1. Por lo tanto, el último paso es una clasificación de inserción ordinaria.
Los ejemplos que se enumeran a continuación se derivan de la regla h=h*3+1:
paquete com.jll.sort; clase pública ShellSort { int[] arr; int tamaño; public ShellSort() { super() } public ShellSort(int tamaño) { this.size = tamaño; } /** * @param args */ public static void main(String[] args) { ShellSort ss = new ShellSort(10); i=0;i<10;i++){ ss.arr[i] = (int) ((Math.random()*100)+1); System.out.print(ss.arr[i]+" " ); } ss.shellSort(); System.out.println(); System.out.println("después de ordenar:"); System.out.print(ss.arr[i]+" "); public void shellSort(){ int h = 1; while(h<=size/3){ h = h*3+1; (;h>0;h=(h-1)/3){ for(int i=h;i<size;i++){ int temp = arr[i]; while(j>h-1&&arr[jh]>temp){ arr[j]=arr[jh];