>  기사  >  백엔드 개발  >  PHP 정렬 알고리즘의 병합 정렬에 대한 자세한 설명

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

小云云
小云云원래의
2018-01-08 09:54:161559검색

PHP 정렬 알고리즘에는 여러 종류가 있습니다. 이 글에서는 주로 PHP 정렬 알고리즘 시리즈 병합 정렬에 대한 관련 정보를 소개합니다. 관심 있는 친구들이 참고할 수 있기를 바랍니다.

Merge Sort

Merge Sort(MERGE-SORT)는 병합 작업을 기반으로 하는 효과적인 정렬 알고리즘입니다. 이 알고리즘은 분할 및 정복 방법(pide 및 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)

번째 3번째 이후 병합

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

네 번째 병합 후

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

PHP 코드 구현


<?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 기술

PHP 공통 정렬 알고리즘 학습

JavaScript에서 일반적으로 사용되는 기본 정렬 알고리즘 분석 예

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

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