>백엔드 개발 >PHP 튜토리얼 >PHP 정렬 알고리즘 시리즈의 병합 정렬에 대한 자세한 설명

PHP 정렬 알고리즘 시리즈의 병합 정렬에 대한 자세한 설명

jacklove
jacklove원래의
2018-05-22 17:37:051865검색

이 글에서는 PHP 정렬 알고리즘 시리즈 중 병합 정렬에 대해 자세히 설명합니다.

Merge Sort

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

병합 과정

병합 정렬의 핵심은 두 개의 정렬된 배열이 있다고 가정합니다. 두 개의 정렬된 배열 중 첫 번째 요소를 비교하여 해당 요소를 병합합니다. 그것을 가져온 후에는 해당 배열에서 요소가 삭제되며, 배열에 요소가 없으면 다른 배열의 나머지 요소를 세 번째 배열에 직접 추가할 수 있습니다.

Principle

1. 시퀀스에서 인접한 두 숫자를 모두 병합하여 ceil(n/2) 시퀀스를 형성합니다. 정렬 후 각 시퀀스에는 두 개의 요소가 포함되며 마지막 시퀀스에는 하나의 요소만 있을 수 있습니다.

2. 위의 시퀀스를 다시 병합하여 ceil(n/4) 시퀀스를 만듭니다. 각 시퀀스에는 4개의 요소가 포함되며 마지막 시퀀스에는 3개 이하의 요소만 있을 수 있습니다.

3. 모든 요소가 정렬될 때까지 2단계를 반복합니다.

배열 [53,89,12,6,98,25,37,92,5] 정렬

첫 번째 병합 후

(53,89),12,(6,98) ,( 25,37),(5,92)

두 번째 병합 후

(12,53,89),(6,25,37,98),(5,92)

세 번째 병합 후

( 6,12,25,37,53,89,98),(5,92)

네 번째 합병 이후

5,6,12,25,37,53,89,92,98

PHP 코드 구현

function merge_sort($arr){
 
$length=count($arr);
 
if($length<=1){
 
return $arr;
 
}
 
//分解数组,递归排序
 
$half=ceil($length/2);
 
$arr2=array_chunk($arr,$half);
 
$left=merge_sort($arr2[0]);
 
$right=merge_sort($arr2[1]);
 
while(count($left)&&count($right)){
 
if($left[0]<$right[0]){
 
$reg[]=array_shift($left);
 
}else{
 
$reg[]=array_shift($right);
 
}
 
}
 
return array_merge($reg,$left,$right);
 
}

이 글은 PHP 정렬 알고리즘 시리즈 중 병합 정렬에 대한 자세한 설명을 설명하고 있습니다. 관련 내용은 PHP 중국어 홈페이지를 참고해주세요.

관련 권장 사항:

thinkPHP5 프레임워크 데이터베이스 일관성 작업: 캐시() 사용 세부 정보

PHP 인터페이스 다중 상속 및 타릿은 다중 상속 효과를 달성하기 위한 튜토리얼 세부 정보

PHP 특정 연도 주 시작일 및 종료일 튜토리얼

위 내용은 PHP 정렬 알고리즘 시리즈의 병합 정렬에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.