우리는 PHP의 배열에 대해 너무 많이 알고 있습니다. 여러분이 병합 정렬에 대해 얼마나 알고 있는지는 모르겠습니다. 따라서 이 부분에 대해서는 걱정하지 마십시오. 이 내용을 더 깊이 이해해 보세요.
관련 추천: PHP 배열의 검색 알고리즘은 무엇인가요? 그것을 찾는 방법?
병합 정렬:
병합 정렬(ERGE-SOQfT)은 병합 작업을 기반으로 하는 효과적인 정렬 알고리즘입니다. 이 알고리즘은 분할 및 정복 방법의 매우 일반적인 응용 프로그램입니다. 이미 정렬된 하위 시퀀스를 병합하여 완전히 정렬된 시퀀스를 얻습니다. 즉, 먼저 각 하위 시퀀스를 순서대로 만든 다음 하위 시퀀스 세그먼트를 순서대로 만듭니다. 두 개의 순서 목록이 하나의 순서 목록으로 병합되는 경우 이를 양방향 병합이라고 합니다. 코드를 예로 들어보겠습니다.
<?php //PHP数组排序算法:合并算法. //二路归并 $arr1 = array(1,3,5); $arr2 = array(2,4,6); //取出一个空数组用于归并空间 $arr3 = array(); while(count($arr1) & count($arr2)){ //只要$arr1和$arr2里面还有元素,就进行循环 //取出每个数组的第-一个元素:进行比较 $arr3[] = $arr1[0] < $arr2[0] ? array_shift($arr1) : array_shift($arr2); } //合并结果 print_r(array_merge($arr3 ,$arr1,$arr2));
결과는 다음과 같습니다.
병합 정렬 알고리즘은 다음과 같습니다.
1) 배열을 두 개의 배열로 분할합니다. .
2) 1단계를 반복하여 배열을 가장 작은 단위로 분할합니다. .
3) 정렬된 두 시퀀스의 합이 되도록 공간을 적용합니다. 이 공간은 병합된 시퀀스를 저장하는 데 사용됩니다.
4) 두 개의 포인터를 설정합니다. 초기 위치는 두 개의 정렬된 시퀀스의 시작 위치입니다. .
5) 두 포인터가 가리키는 요소를 비교하여 상대적으로 작은 요소를 선택하여 병합 공간에 넣은 후 포인터를 다음 위치로 이동합니다.
6) 포인터가 시퀀스의 끝을 초과할 때까지 3단계를 반복합니다. .
7) 다른 시퀀스의 나머지 모든 요소를 병합된 시퀀스의 끝 부분에 직접 복사합니다.
코드는 다음과 같습니다.
$arr = array(4,7,2,1,5,9,3); //归并排序函数 function merge_sort($arr){ //递归出口 $len = count($arr); if($len <= 1) return $arr; //拆分. $middle = floor($len / 2); $left = array_slice($arr,0, $middle); $right = array_slice($arr, $midd1e); //假设左边和右边都已经排好序:二路归并 $m = array(); while(count($left) && count($right)){ //只要$arr1和$arr2里面还有元素,就进行循环 //取出每个数组的第一个元素: 进行比较 $arr3[] = $left[0] < $right[0] ? array_shift($left) : array_shift($right); } //返回结果 return array_merge($m, $left ,$right); } print_r(merge_sort($arr));
추천 학습: "PHP 비디오 튜토리얼"
위 내용은 PHP 배열 - 병합 정렬을 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!