>  기사  >  백엔드 개발  >  PHP 칵테일 정렬 알고리즘 구현(코드 예)

PHP 칵테일 정렬 알고리즘 구현(코드 예)

藏色散人
藏色散人원래의
2019-03-08 10:14:292397검색

양방향 버블 정렬, 셰이커 정렬, 리플 정렬, 셔플 정렬 또는 셔틀 정렬이라고도 하는 칵테일 정렬은 버블 정렬 안정적인 정렬 알고리즘이자 비교 정렬인 의 변형입니다.

PHP 칵테일 정렬 알고리즘 구현(코드 예)

이 알고리즘은 목록을 탐색할 때마다 양방향으로 정렬한다는 점에서 버블 정렬과 다릅니다. 이 정렬 알고리즘은 실제로 버블 정렬보다 구현하기가 더 어렵고 버블 정렬의 거북이 문제를 해결합니다. 사소한 성능 향상만 제공하고 거품과 같은 점근적 성능을 향상시키지는 않지만 교육에는 유용하지만 실질적인 의미는 없습니다.

칵테일 정렬 시각화 애니메이션 예시는 다음과 같습니다.

PHP 칵테일 정렬 알고리즘 구현(코드 예)

PHP 칵테일 정렬 코드 예시는 다음과 같습니다.

<?php
function cocktailSort($my_array)
{
    if (is_string($my_array))
        $my_array = str_split(preg_replace(&#39;/\s+/&#39;,&#39;&#39;,$my_array));

    do{
        $swapped = false;
        for($i=0;$i<count($my_array);$i++){
            if(isset($my_array[$i+1])){
                if($my_array[$i] > $my_array[$i+1]){
                    list($my_array[$i], $my_array[$i+1]) = array($my_array[$i+1], $my_array[$i]);
                    $swapped = true;
                }
            }
        }

        if ($swapped == false) break;

        $swapped = false;
        for($i=count($my_array)-1;$i>=0;$i--){
            if(isset($my_array[$i-1])){
                if($my_array[$i] < $my_array[$i-1]) {
                    list($my_array[$i],$my_array[$i-1]) = array($my_array[$i-1],$my_array[$i]);
                    $swapped = true;
                }
            }
        }
    }while($swapped);

    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;,cocktailSort($test_array)). PHP_EOL;

출력:

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

이 글은 다음과 같습니다. PHP 칵테일(Cocktail) 정렬 알고리즘 소개, 도움이 필요한 친구들에게 도움이 되었으면 좋겠습니다!

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

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