> 웹 프론트엔드 > JS 튜토리얼 > JavaScript 정렬 알고리즘의 두 가지 예 Hill Sorting_기본 지식

JavaScript 정렬 알고리즘의 두 가지 예 Hill Sorting_기본 지식

WBOY
풀어 주다: 2016-05-16 16:53:18
원래의
1695명이 탐색했습니다.

삽입 정렬은 거의 정렬된 데이터를 처리할 때 매우 효율적입니다. 즉, 선형 정렬의 효율성을 얻을 수 있습니다.
그러나 삽입 정렬은 한 번에 1비트만 데이터를 이동할 수 있기 때문에 일반적으로 비효율적입니다.
힐 정렬은 디자이너 Donald Shell의 이름을 따서 명명되었으며 알고리즘은 1959년에 발표되었습니다. 일부 오래된 교과서와 참고 설명서에는 Marlene Metzner Norton의 이름이 포함된 알고리즘 Shell-Metzner가 지정되어 있지만 Metzner 자신에 따르면 "나는 이 알고리즘에 대해 아무것도 하지 않았으며 내 이름이 알고리즘에 표시되어서는 안 됩니다"

JavaScript 정렬 알고리즘의 두 가지 예 Hill Sorting_기본 지식
Hill 정렬의 기본 아이디어: 먼저 n보다 작은 정수 d1을 첫 번째 증분으로 취하고 파일의 모든 레코드를 d1 그룹으로 나눕니다. 거리가 d1의 배수인 모든 레코드는 동일한 그룹에 배치됩니다. 먼저 각 그룹 내에서 직접 삽입 정렬을 수행한 다음 두 번째 증분 d2

이 방법은 본질적으로 그룹화된 삽입 방법입니다.

예시 1:


코드 복사 코드는 다음과 같습니다.
/**
* 내림차순 증분 정렬 알고리즘이라고도 하는 힐 정렬은 삽입 정렬보다 더 효율적이고 향상된 버전입니다. Hill 정렬은 불안정한 정렬 알고리즘입니다.
*
* 힐 정렬은 삽입 정렬의 다음 두 가지 속성을 기반으로 개선된 방법을 제안합니다.
*
* 삽입 정렬은 거의 이미 정렬된 데이터, 즉 선형 정렬의 효율성을 얻을 수 있습니다
* 그러나 삽입 정렬은 한 번에 한 비트만 이동할 수 있기 때문에 일반적으로 비효율적입니다
*
*/

function shellSort( list ) {
var gap = Math.floor( list.length / 2 );

while( gap > 0 ) {

for( i = gap; i < list.length; i ) {
temp = list[i];

for( j = i; j >= gap && list[ j - 간격 ] > j -= 간격 ) {
목록[j] = 목록[j - 간격];
목록[j] = 온도;
}

간격 = Math.floor( gap / 2 );
}

return list;
};

// test
var arr = [2, 1, 3 , 12, 5, 66, 23, 87, 15, 32];

shellSort(arr);


예시 2:


코드 복사 코드는 다음과 같습니다.


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿