>php教程 >php手册 >[常用算法PHP实现]之鸡尾酒排序

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB원래의
2016-06-06 20:08:101208검색

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

以下概念摘自维基百科:

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

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

鸡尾酒排序最糟或是平均所花费的次数都是O(n^2),但如果序列在一开始已经大部分排序过的话,会接近O(n)

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

//如果代码行比较长,可以横向拖动下
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;
}
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.