欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

[常用算法PHP实现]之鸡尾酒排序

程序员文章站 2022-06-07 12:39:03
...

以下概念摘自*: 鸡尾酒排序,也叫定向冒泡排序,?鸡尾酒搅拌排序,?搅拌排序,是冒泡排序的一种变形。不同的地方在于从低到高然后从高到低,而冒泡排序则仅从低到高去比较序列里的每个元素。他可以得到比冒泡排序稍微好一点的效能,原因是冒泡排序只从

以下概念摘自*:

鸡尾酒排序,也叫定向冒泡排序,?鸡尾酒搅拌排序,?搅拌排序,是冒泡排序的一种变形。不同的地方在于从低到高然后从高到低,而冒泡排序则仅从低到高去比较序列里的每个元素。他可以得到比冒泡排序稍微好一点的效能,原因是冒泡排序只从一个方向进行比对(由低到高),每次循环只移动一个项目。

以序列(2,3,4,5,1)为例,鸡尾酒排序只需要访问一次序列就可以完成排序,但如果使用冒泡排序则需要四次。 但是在乱数序列的状态下,鸡尾酒排序与冒泡排序的效率都很差劲,优点只有观念简单这一点

鸡尾酒排序最糟或是平均所花费的次数都是[常用算法PHP实现]之鸡尾酒排序,但如果序列在一开始已经大部分排序过的话,会接近[常用算法PHP实现]之鸡尾酒排序

其实直接叫它双向冒泡排序就好了。

//如果代码行比较长,可以横向拖动下
function cocktailSort($arr,$sort='asc'){
    $sorted = false;
    $bottom = 0;
    $top = count($arr)-1;
    while(!$sorted){
        $sorted = true;
        for ($i = $bottom; $i $arr[$i+1]&&$sort=='asc')||($arr[$i] $bottom; $i--) {
            if(($arr[$i]$arr[$i-1]&&$sort=='desc')){
                $temp = $arr[$i-1];
                $arr[$i-1] = $arr[$i];
                $arr[$i] = $temp;
                $sorted = false;
            }
        }
        //$bottom+1是因为是拥有最小(大)值得元素已经在数组的底部
        $bottom++;
    }
    return $arr;
}