정렬 삽입은 거의 정렬 된 데이터에서 작동 할 때 효율적입니다. 즉, 선형 분류의 효율이 달성 될 수 있습니다.
그러나 삽입 분류는 일반적으로 삽입 분류가 데이터를 한 번에 하나씩 만 움직일 수 있기 때문에 일반적으로 비효율적입니다.
Hill Sorting은 1959 년에 출판 된 알고리즘 인 Designer Donald Shell의 이름을 따서 명명되었습니다. Marlene Metzner Norton이라는 이름이 포함 된 Algorithm Shell-Metzner라는 일부 오래된 교과서 및 참조 설명서는 "이 알고리즘에 대해 아무것도하지 않았으므로 내 이름은 알고리즘에 표시되지 않아야합니다.
언덕 분류의 기본 아이디어 : 먼저 첫 번째 증분으로 N보다 작은 정수 D1을 가져 와서 파일의 모든 레코드를 D1 그룹으로 나눕니다. 거리 D1의 배수가있는 모든 레코드는 동일한 그룹에 배치됩니다. 먼저 각 그룹에서 직접 삽입 분류를 수행하고, 두 번째 증분 D2 <D1을 가져 와서 위의 그룹화 및 정렬을 반복하여 (dt <dt-l <… <d2 <d1), 즉 레코드는 동일한 그룹에 배치되어 직접 정렬됩니다.
이 방법은 본질적으로 그룹화 삽입 방법입니다.
Example 1:
코드 사본은 다음과 같습니다.
/**
* 증분 분류 분류 알고리즘 감소라고도하는 Hill 정렬은 인서트 분류의보다 효율적이고 개선 된 버전입니다. 언덕 분류는 안정적인 정렬 알고리즘입니다.
*
* Hill 정렬은 다음의 두 가지 특성을 기반으로 개선 된 방법을 제안합니다.
*
* 거의 정렬 된 데이터에서 작동 할 때 삽입 정렬이 효율적입니다. 즉, 선형 분류의 효율을 달성 할 수 있습니다.
* 그러나 삽입 정렬은 일반적으로 비효율적입니다. 삽입 정렬은 한 번에 하나씩 만 데이터를 이동할 수 있기 때문입니다.
*
*/
함수 shellsort (list) {
var gap = math.floor (list.length / 2);
while (gap> 0) {
for (i = gap; i <list.length; i ++) {
임시 = 목록 [i];
for (j = i; j> = gap && list [j -gap]> temp; j- = gap) {
list [j] = list [j -gap];
}
목록 [j] = 온도;
}
gap = math.floor (gap / 2);
}
반환 목록;
};
// 시험
var arr = [2, 1, 3, 12, 5, 66, 23, 87, 15, 32];
쉘 소트 (ARR);
Example 2:
코드 사본은 다음과 같습니다.
<script type = "text/javaScript">
//document.write("------------------------------------- --------------------------------------------------------- ---------------------- 1.3의 힘에 1.3 -------- ");
//document.write("<BR /> <br /> ")
// var array = new Array (12, 25, 32, 16, 18, 27, 59, 69, 36);
함수 shellsort (배열) {
var j, i, v, h = 1, s = 3, k, n = array.length;
var result = "";
var count = 0;
while (h <n)
H = S*H+1;
while (h> 1) {
H = (H-1)/s;
for (k = 0; k <h; k ++)
for (i = k+h, j = i; i <n; i+= h, j = i) {
v = 배열 [i];
while (true)
if ((j- = h)> = 0 && array [j]> v)
배열 [j+h] = 배열 [j];
또 다른
부서지다;
배열 [j+h] = v;
}
카운트 ++;
결과 + = "<br /> 스레드" + count + "패스를 통해 주문한 결과는 다음과 같습니다.";
for (var n = 0; n <array.length; n ++) {
결과 + = 배열 [n] + ",";
}
}
반환 결과;
}
// ShallSort (배열);
//document.write("<BR /> <br /> ");
</스크립트>