Die Hill-Sortierung eignet sich gut für die Sortierung mittelgroßer Arrays von bis zu mehreren tausend Datenelementen und ist daher nicht so schnell wie die schnelle Sortierung und andere Sortieralgorithmen ist nicht die optimale Wahl zum Sortieren sehr großer Dateien, aber die Hill-Sortierung ist viel schneller als die Auswahl- und Einfügungssortierung, die eine zeitliche Komplexität von O(n²) haben, und sie ist sehr einfach zu implementieren und der Code ist kurz.
Hill-Sortierung ist auch eine Art Einfügungssortierung. Wenn die kleinste Zahl am Ende liegt, löst Hill dieses Problem auch durch Erhöhen des Abstands Elemente bei der Einfügungssortierung und Durchführung der Einfügungssortierung zwischen diesen Abstandselementen. Wenn diese Datenelemente einmal sortiert werden, verringert der Hill-Sortieralgorithmus den Abstand zwischen den Datenelementen und sortiert sie dann nach unten. Der Abstand zwischen Datenelementen bei der Durchführung dieser Sortierungen wird als Inkrement bezeichnet und üblicherweise durch den Buchstaben h dargestellt.
Für ein Array, das nach Hill sortiert werden soll, sollte das Startintervall größer sein und dann sollte das Intervall kontinuierlich verringert werden, bis das Intervall 1 wird.
Spacer-Reihenfolge:
Die Qualität von Zahlen in beabstandeten Folgen wird oft als wichtig angesehen – sie haben keinen anderen gemeinsamen Teiler als 1. Diese Einschränkung macht es wahrscheinlicher, dass jeder Sortierdurchlauf den Effekt des vorherigen Durchgangs beibehält. Für unterschiedliche beabstandete Folgen gibt es ein Absolutes Bedingung ist, dass das allmählich abnehmende Intervall schließlich gleich 1 sein muss. Daher ist der letzte Durchgang eine gewöhnliche Einfügungssortierung.
Die unten aufgeführten Beispiele sind aus der Regel h=h*3+1 abgeleitet:
package com.jll.sort; public class ShellSort { int[] arr; public ShellSort() { super( } public ShellSort(int size) { this.size = new int[size]; } /** * @param args */ public static void main(String[] args) { ShellSort ss = new ShellSort(10); for(int i=0;i<10;i++){ ss.arr[i] = (int) ((Math.random()*100)+1); System.out.print(ss.arr[i]+" " ); ss.shellSort(); System.out.println("after sort:"); System.out.print(ss.arr[i]+" "} } public void shell(){ 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];