2 자바스크립트 정렬 알고리즘 예시 병합 정렬(Merge Sort)_기본 지식

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

병합 정렬은 병합 연산을 기반으로 하는 효과적인 정렬 알고리즘입니다. 이 알고리즘은 분할 정복(Divide and Conquer) 방식을 사용하는 매우 일반적인 응용 프로그램입니다.

병합 정렬 방법은 두 개 이상의 순서가 지정된 목록을 새로운 순서 목록으로 병합하는 것입니다. 즉, 정렬할 순서를 여러 하위 순서로 나누어 각 하위 순서를 정렬하는 것입니다. 그런 다음 정렬된 하위 시퀀스를 전체 정렬된 시퀀스에 병합합니다.

병합 정렬은 병합 연산을 기반으로 하는 효과적인 정렬 알고리즘입니다. 이 알고리즘은 분할 정복(Divide and Conquer) 방식을 사용하는 매우 일반적인 응용 프로그램입니다. 이미 정렬된 하위 시퀀스를 병합하여 완전히 정렬된 시퀀스를 얻습니다. 즉, 먼저 각 하위 시퀀스를 순서대로 만든 다음 하위 시퀀스 세그먼트를 순서대로 만듭니다. 두 개의 순서 목록이 하나의 순서 목록으로 병합되는 경우 이를 양방향 병합이라고 합니다.

병합 작업 과정은 다음과 같습니다.

1. 크기가 두 개의 정렬된 시퀀스의 합이 되도록 공간을 적용합니다. 이 공간은 병합된 시퀀스를 저장하는 데 사용됩니다.
2. 두 개의 정렬된 시퀀스의 초기 위치를 설정합니다. 시작 위치
3. 두 포인터가 가리키는 요소를 비교하고 상대적으로 작은 요소를 선택하여 병합 공간에 넣은 후 포인터를 다음 위치로 이동합니다
4. 특정 포인터가 나올 때까지 3단계를 반복합니다. 시퀀스의 끝에 도달
5. 다른 시퀀스의 나머지 모든 요소를 ​​병합된 시퀀스의 끝에 직접 복사합니다

예 1:

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

/**
* 병합 알고리즘이라고도 불리는 병합 연산(merge)은 정렬된 두 시퀀스를 하나의 시퀀스로 병합하는 연산을 말합니다.
* 병합 정렬 알고리즘은 병합 작업에 의존합니다.
*
* 병합 작업 과정은 다음과 같습니다.
*
* 1. 정렬된 두 시퀀스의 합이 되도록 공간을 적용합니다. 이 공간은 병합된 내용을 저장하는 데 사용됩니다. 시퀀스
* 2. 두 개의 포인터를 설정합니다. 초기 위치는 두 개의 정렬된 시퀀스의 시작 위치입니다.
* 3. 두 포인터가 가리키는 요소를 비교하고 상대적으로 작은 요소를 선택하여 병합에 넣습니다. 공백을 입력하고 포인터를 다음 위치로 이동합니다.
* 4. 포인터가 시퀀스의 끝에 도달할 때까지 3단계를 반복합니다.
* 5. 다른 시퀀스의 나머지 모든 요소를 ​​병합된 시퀀스의 끝에 직접 복사합니다.
*
*/

function mergeSort(items) {
if (items.length < 2) {
return items;
}

var middle = Math.floor(items.length / 2) ,
왼쪽 = items.slice(0, 중간),
오른쪽 = items.slice(가운데),
params = merge(mergeSort(왼쪽), mergeSort(오른쪽));

params.unshift(0, items.length);
items.splice.apply(items, params);

항목 반환;

함수 병합(왼쪽, 오른쪽) ) {
var result = [],
il = 0,
ir = 0;

while (il < left.length && ir < right.length) {
if ( 왼쪽[il] < 오른쪽[ir]) {
                             result.push(left[il]) >                                                 return result.concat(왼쪽.슬라이스(il)) .concat(오른쪽.슬라이스(ir) ); = [2, 1, 3, 12, 5, 66, 23, 87, 15, 32];

mergeSort(arr);



예 2:





코드 복사

코드는 다음과 같습니다.




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