>  기사  >  백엔드 개발  >  PHP Hill(Shell) 정렬 알고리즘 구현(자세한 코드 설명)

PHP Hill(Shell) 정렬 알고리즘 구현(자세한 코드 설명)

藏色散人
藏色散人원래의
2019-03-07 10:23:063666검색

Hill(Shell) 정렬 또는 Shell 방법은 내부 비교 정렬입니다. 버블 정렬이나 삽입 정렬의 일반화라고 볼 수 있습니다. 이 방법은 먼저 서로 멀리 떨어져 있는 요소 쌍을 정렬한 다음 비교할 요소 간의 간격을 점차적으로 좁힙니다. 멀리 떨어져 있는 요소로 시작하면 이웃을 바꾸는 것보다 더 빠르게 일부 다른 요소를 이동할 수 있습니다.

PHP Hill(Shell) 정렬 알고리즘 구현(자세한 코드 설명)

쉘 정렬 예는 다음과 같습니다:

PHP Hill(Shell) 정렬 알고리즘 구현(자세한 코드 설명)

첫 번째 순회는 다양한 하위 배열 (a1, a6, a11), (a2, a7, a12), ( a3 , a8), (a4, a9), (a5, a10) 은 삽입 정렬을 수행합니다. 예를 들어 하위 배열(a1, a6, a11)을 (62,17,25)에서 (17,25,62)로 변경합니다.

그런 다음 "3 정렬", 하위 배열(a1, a4, a7, a10), (a2, a5, a8, a11), (a3, a6, a9, a12)에 대해 삽입 정렬을 수행합니다.

마지막은 전체 배열(a1,...,a12)인 "1 sort"입니다. 예제에서 볼 수 있듯이 Shell 정렬 작업의 하위 배열은 처음에는 매우 짧지만 나중에는 길어지지만 기본적으로 순서가 지정됩니다. 두 경우 모두 삽입 정렬이 작동합니다. 쉘 정렬은 불안정합니다. 동일한 값을 가진 요소의 상대적 순서가 변경될 수 있습니다. 입력이 부분적으로 정렬될 때 더 빠르게 수행되는 적응형 정렬 알고리즘입니다.

Hill(Shell) 정렬 그래픽은 다음과 같습니다.

PHP Hill(Shell) 정렬 알고리즘 구현(자세한 코드 설명)

PHP에서 Shell(Shell) 정렬 알고리즘을 구현하는 코드 예제:

<?php
function shell_Sort($my_array)
{
    $x = round(count($my_array)/2);
    while($x > 0)
    {
        for($i = $x; $i < count($my_array);$i++){
            $temp = $my_array[$i];
            $j = $i;
            while($j >= $x && $my_array[$j-$x] > $temp)
            {
                $my_array[$j] = $my_array[$j - $x];
                $j -= $x;
            }
            $my_array[$j] = $temp;
        }
        $x = round($x/2.2);
    }
    return $my_array;
}

$test_array = array(3, 0, 2, 5, -1, 4, 1);
echo "原始数组 :\n";
echo implode(&#39;, &#39;,$test_array );
echo "\n排序后数组\n:";
echo implode(&#39;, &#39;,shell_Sort($test_array)). PHP_EOL;

출력:

原始数组 : 3, 0, 2, 5, -1, 4, 1 
排序后数组 :-1, 0, 1, 2, 3, 4, 5

이 문서는 PHP Shell(Shell)에 대한 것입니다. ) )은 간단하고 이해하기 쉬운 정렬 알고리즘에 대한 소개입니다. 도움이 필요한 친구들에게 도움이 되기를 바랍니다!

위 내용은 PHP Hill(Shell) 정렬 알고리즘 구현(자세한 코드 설명)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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