Rumah > pembangunan bahagian belakang > tutorial php > PHP鸡尾酒(Cocktail)排序算法的实现(代码示例)

PHP鸡尾酒(Cocktail)排序算法的实现(代码示例)

藏色散人
Lepaskan: 2023-04-05 14:28:01
asal
2528 orang telah melayarinya

鸡尾酒排序也称为双向冒泡排序(bidirectional bubble sort)、摇曳排序(shaker sort)、波纹排序( ripple sort)、洗牌排序(shuffle sort)或穿梭排序( shuttle sort )是冒泡排序的一种变体,它既是一种稳定的排序算法,也是一种比较排序。

PHP鸡尾酒(Cocktail)排序算法的实现(代码示例)

该算法与冒泡排序的不同之处在于,它在每次遍历列表时都在两个方向进行排序。这种排序算法实际上比冒泡排序更难以实现,并且解决了冒泡排序中的海龟问题。它只提供了微小的性能改进,并没有改善渐近性能; 就像泡沫一样,虽然它在教育中有用,但它没有实际意义。

鸡尾酒排序可视化动图示例如下:

Sorting_shaker_sort_anim.gif

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;
Salin selepas log masuk

输出:

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

本篇文章就是关于PHP鸡尾酒(Cocktail)排序算法的实现方法介绍,希望对需要的朋友有所帮助!

Atas ialah kandungan terperinci PHP鸡尾酒(Cocktail)排序算法的实现(代码示例). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan