Hill(Shell) 정렬 또는 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에서 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(', ',$test_array ); echo "\n排序后数组\n:"; echo implode(', ',shell_Sort($test_array)). PHP_EOL;
原始数组 : 3, 0, 2, 5, -1, 4, 1 排序后数组 :-1, 0, 1, 2, 3, 4, 5
위 내용은 PHP Hill(Shell) 정렬 알고리즘 구현(자세한 코드 설명)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!