以下概念摘自维基百科: 鸡尾酒排序,也叫定向冒泡排序,?鸡尾酒搅拌排序,?搅拌排序,是冒泡排序的一种变形。不同的地方在于从低到高然后从高到低,而冒泡排序则仅从低到高去比较序列里的每个元素。他可以得到比冒泡排序稍微好一点的效能,原因是冒泡排序只从
以下概念摘自维基百科:
鸡尾酒排序,也叫定向冒泡排序,?鸡尾酒搅拌排序,?搅拌排序,是冒泡排序的一种变形。不同的地方在于从低到高然后从高到低,而冒泡排序则仅从低到高去比较序列里的每个元素。他可以得到比冒泡排序稍微好一点的效能,原因是冒泡排序只从一个方向进行比对(由低到高),每次循环只移动一个项目。
以序列(2,3,4,5,1)为例,鸡尾酒排序只需要访问一次序列就可以完成排序,但如果使用冒泡排序则需要四次。 但是在乱数序列的状态下,鸡尾酒排序与冒泡排序的效率都很差劲,优点只有观念简单这一点
鸡尾酒排序最糟或是平均所花费的次数都是,但如果序列在一开始已经大部分排序过的话,会接近。
其实直接叫它双向冒泡排序就好了。
//如果代码行比较长,可以横向拖动下 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实现]之鸡尾酒排序, 感谢原作者分享。