Le tri Hill fonctionne bien pour le tri de tableaux de taille moyenne contenant jusqu'à plusieurs milliers d'éléments de données. Le tri Hill n'est pas aussi rapide que le tri rapide et d'autres algorithmes de tri avec une complexité temporelle de O(n*logn). Il convient donc pour cela. n'est pas le choix optimal pour trier des fichiers très volumineux, mais le tri Hill est beaucoup plus rapide que le tri par sélection et le tri par insertion, qui ont une complexité temporelle de O(n²), et il est très facile à mettre en œuvre et le code est court.
Le tri Hill est également une sorte de tri par insertion. Dans le tri par insertion, si le plus petit nombre est à la fin, il y a trop de copies. Il s'agit également d'un tri incrémental n. éléments dans le tri par insertion et en effectuant un tri par insertion entre ces éléments d'espacement, lorsque ces éléments de données sont triés une fois, l'algorithme de tri Hill réduit l'espacement entre les éléments de données puis les trie, et ainsi de suite. L'espacement entre les éléments de données lors de l'exécution de ces tris est appelé un incrément et est classiquement représenté par la lettre h.
Pour un tableau sur le point d'être trié par Hill, l'intervalle de départ doit être plus grand, puis l'intervalle doit être continuellement réduit jusqu'à ce qu'il devienne 1.
Séquence d'espacement :
La qualité des nombres dans les séquences espacées est souvent considérée comme importante - ils n'ont pas de diviseur commun autre que 1. Cette contrainte rend plus probable que chaque passe de tri préserve l'effet de la passe précédente. Pour différentes séquences espacées, il existe un absolu. La condition est que l'intervalle décroissant progressivement doit finalement être égal à 1. Par conséquent, la dernière passe est un tri par insertion ordinaire.
Les exemples répertoriés ci-dessous sont dérivés de la règle h=h*3+1 :
package com.jll.sort; classe publique ShellSort { int[] arr; public ShellSort() { super(); } public ShellSort(int taille) { this.size = taille; } /** * @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("après le tri :"); System.out.print(ss.arr[i]+" "); } } public void shellSort(){ int h = 1; while(h<=size/3){ h = h*3+1 } for (;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]; arr[j]=temp;