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

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

藏色散人
풀어 주다: 2023-04-05 14:28:01
원래의
2454명이 탐색했습니다.

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

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿