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

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

WBOY
发布: 2016-06-06 20:08:10
原创
1176 人浏览过

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

以下概念摘自维基百科:

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

以序列(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;
}
登录后复制
相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板