자바 힐 정렬
힐 정렬(Hill Sorting)은 삽입 정렬(Insertion Sorting)의 일종으로 축소증분법(Shrinking Increment Method)이라고도 생생하게 부를 수 있다. 기본 아이디어는 분할 정복 방법과 비슷하게 배열을 여러 배열로 나누는 것입니다. 그러나 여기서 분할은 상수 d에 의해 제어됩니다.
이 0<d<n, n은 배열의 길이입니다. 이 알고리즘은 삽입 정렬의 속도를 가지며, 또한 향상된 알고리즘이라고 볼 수 있습니다. 삽입 알고리즘에서는 배열의 끝에 가장 작은 숫자가 있으면 삽입 알고리즘이 마지막 숫자를 복제합니다.
첫 번째 위치로 이동하면 많은 비용이 낭비됩니다. 이 향상된 Hill 정렬을 사용하면 데이터 요소의 장기간 이동이 가능합니다. 이것이 이 알고리즘의 장점이다.
다음과 같이 코드 코드를 복사합니다.
패키지 cn.cqu.coce.xutao;
공개 클래스 shell3 {
공개 정적 무효 메인(문자열 인수[]){
int a[]={7,43,23,5,3,2,0,6,74,9};
int n=a.길이;
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 온도=a[j+gap];
a[j+gap]=a[j];
a[j]=온도;
}
}
}
for(int i=0;i<n;i++)
System.out.print(a[i]+"/t");
System.out.println();
}
}
두 번째 예
다음과 같이 코드 코드를 복사합니다.
클래스 쉘
{
공공 무효 shell_sort(int [] 배열){
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)
부서지다;
if(배열[j]<배열[jd]){
int tmp;
tmp=배열[j];
배열[j]=배열[jd];
배열[jd]=tmp;
}
}
}
}
snp(배열);
}
}
공개 무효 snp(int[] 배열){
for(int i=0;i<arrays.length;i++){
System.out.print(arrays[i]+" ");
}
System.out.println();
}
공개 정적 무효 메인(문자열[] 인수)
{
쉘 s=new Shell();
int[] a={45,20,80,40,26,58,66,70};
s.shell_sort(a);
}
}
실행 결과:
다음과 같이 코드 코드를 복사합니다.
---------- 자바 ----------
20 70 40 26 58 66 80
20 58 45 26 70 66 80
26 40 45 58 66 70 80
출력 완료(0초 소요) - 정상 종료