소개
언덕 분류 (증분 방법 감소)는 삽입 클래스 분류에 속합니다. 쉘에 의해 제안됩니다. HILL 분류는 직접 삽입 분류를 간단하게 개선했습니다. 삽입 분류의 요소 사이의 간격이 증가하고 이러한 간격 요소로 삽입하여 데이터 항목이 큰 범위를 가로 질러 이동하게합니다. 이러한 데이터 항목을 한 번 정렬 한 후에는 Hill 정렬 알고리즘이 데이터 항목 간격을 줄이고 정렬 한 다음 차례로 진행합니다. 이러한 분류시 데이터 항목 간의 간격을 증분이라고하며 문자 h는이 증분을 나타내는 데 사용됩니다.
일반적으로 사용되는 H 서열은 Knuth에 의해 제안된다. 이 순서는 1에서 시작하여 다음 공식으로 생성됩니다.
H = 3 * H +1
프로그램은 차례로 H 시퀀스를 반대로 계산해야하며 사용해야합니다.
H = (H-1)/3
코드 구현
구현 코드 1 :
public static void shellsort (int [] arr) {int temp; for (int delta = Ar arr [j-delta] = arr [j]; ARR [J] = 온도; }} // loop i} // loop delta}구현 코드 2 :
public static void shellsort2 (int [] arr) {int delta = 1; while (delta <arr.length/3) {// 델타 델타 생성 = 델타*3+1; // <o (n^(3/2)) by Knuth, 1973> : 1, 4, 13, 40, 121, ...} int temp; for (; delta> = 1; delta/= 3) {for (int i = delta; i <arr.length; i ++) {for (int j = i; j> = delta && arr [j] <arr [j-delta]; j- = delta) {temp = arr [j-delta]; arr [j-delta] = arr [j]; ARR [J] = 온도; }} // loop i} // loop delta} 위의 프로그램이이를 직접 삽입 방법과 비교하면 직접 삽입 정렬의 차이는 직접 삽입 정렬의 H가 1로 대체된다는 것입니다.
쉘 분류는 불안정하고 공간 오버 헤드는 O (1)이며 오버 헤드는 O (N3/2)와 O (N7/6) 사이에있는 것으로 추정됩니다.