Java Hill Sortierung
Die Hill-Sortierung ist eine Art Einfügungssortierung und kann auch anschaulich als Schrumpfinkrementmethode bezeichnet werden. Die Grundidee besteht darin, ein Array in mehrere Arrays aufzuteilen, ähnlich wie bei der Divide-and-Conquer-Methode, allerdings wird die Aufteilung hier durch eine Konstante d gesteuert.
Dieses 0<d<n, n ist die Länge des Arrays. Dieser Algorithmus verfügt über die Geschwindigkeit der Einfügungssortierung und kann auch als verbesserter Algorithmus angesehen werden. Wenn am Ende des Arrays eine kleinste Zahl vorhanden ist, dupliziert der Einfügungsalgorithmus die letzte.
Das Verschieben der Position auf die erste Position verschwendet viel Geld. Durch die Verwendung dieser verbesserten Hill-Sortierung kann eine langfristige Verschiebung von Datenelementen erreicht werden. Dies ist der Vorteil dieses Algorithmus.
Kopieren Sie den Codecode wie folgt:
Paket cn.cqu.coce.xutao;
öffentliche Klasse Shell3 {
public static void main(String args[]){
int a[]={7,43,23,5,3,2,0,6,74,9};
int n=a.length;
for(int i=0;i<n;i++)
System.out.print(a[i]+"/t");
System.out.println();
for(int gap=n/2;gap>0;gap/=2){
for(int i=gap;i<n;i++){
for(int j=i-gap;j>=0&&a[j]>a[j+gap];j-=gap){
int temp=a[j+gap];
a[j+Lücke]=a[j];
a[j]=temp;
}
}
}
for(int i=0;i<n;i++)
System.out.print(a[i]+"/t");
System.out.println();
}
}
Zweites Beispiel
Kopieren Sie den Codecode wie folgt:
Klasse Shell
{
public void shell_sort(int [] arrays){
for(int d=5;d>0;d=d-2){
for(int c=0;c<arrays.length-d;c++){
for(int i=c;i<arrays.length;i=i+d){
for(int j=i;j>0;j=jd){
if(j<d)
brechen;
if(arrays[j]<arrays[jd]){
int tmp;
tmp=arrays[j];
Arrays[j]=Arrays[jd];
arrays[jd]=tmp;
}
}
}
}
snp(arrays);
}
}
public void snp(int[] arrays){
for(int i=0;i<arrays.length;i++){
System.out.print(arrays[i]+" ");
}
System.out.println();
}
public static void main(String[] args)
{
Shell s=new Shell();
int[] a={45,20,80,40,26,58,66,70};
s.shell_sort(a);
}
}
Laufergebnisse:
Kopieren Sie den Codecode wie folgt:
---------- Java ----------
20 70 40 26 58 66 80
20 58 45 26 70 66 80
26 40 45 58 66 70 80
Ausgabe abgeschlossen (dauerte 0 Sekunden) – normale Beendigung