A classificação Hill tem um bom desempenho para classificação de matrizes de tamanho médio de até vários milhares de itens de dados. A classificação Hill não é tão rápida quanto a classificação rápida e outros algoritmos de classificação com uma complexidade de tempo de O (n * logn). não é a escolha ideal para classificar arquivos muito grandes, mas a classificação Hill é muito mais rápida do que a classificação por seleção e a classificação por inserção, que têm uma complexidade de tempo de O (n²), e é muito fácil de implementar e o código é curto.
A classificação por inserção também é um tipo de classificação por inserção, se o menor número estiver no final, há muitas cópias. Sua ideia também é aumentar o espaçamento entre elas. elementos na classificação por inserção e realizando a classificação por inserção entre esses elementos de espaçamento, quando esses itens de dados são classificados uma vez, o algoritmo de classificação Hill reduz o espaçamento entre os itens de dados e, em seguida, os classifica e assim por diante. O espaçamento entre os itens de dados ao realizar essas classificações é chamado de incremento e é convencionalmente representado pela letra h.
Para uma matriz que está prestes a ser classificada por Hill, o intervalo inicial deve ser maior e, em seguida, o intervalo deve ser reduzido continuamente até que o intervalo se torne 1.
Sequência do espaçador:
A qualidade dos números em sequências espaçadas é frequentemente considerada importante - eles não têm divisores comuns além de 1. Essa restrição torna mais provável que cada passagem de classificação preserve o efeito da passagem anterior. Para diferentes sequências espaçadas, existe um valor absoluto. A condição é que o intervalo gradualmente decrescente seja finalmente igual a 1. Portanto, a última passagem é uma ordenação por inserção ordinária.
Os exemplos listados abaixo são derivados da regra h=h*3+1:
pacote com.jll.sort; public class ShellSort { int[] arr; public ShellSort() { super(); } /** * @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("após classificação:"); System.out.print(ss.arr[i]+" "); public void shellSort(){ int h = 1; (;h>0;h=(h-1)/3){ for(int i=h;i<tamanho;i++){ int temp = arr[i]; while(j>h-1&&arr[jh]>temp){ arr[j]=arr[jh] } arr[j]=temp;