以下概念摘自维基百科: 鸡尾酒排序,也叫定向冒泡排序,?鸡尾酒搅拌排序,?搅拌排序,是冒泡排序的一种变形。不同的地方在于从低到高然后从高到低,而冒泡排序则仅从低到高去比较序列里的每个元素。他可以得到比冒泡排序稍微好一点的效能,原因是冒泡排序只从
以下概念摘自维基百科:
鸡尾酒排序,也叫定向冒泡排序,?鸡尾酒搅拌排序,?搅拌排序,是冒泡排序的一种变形。不同的地方在于从低到高然后从高到低,而冒泡排序则仅从低到高去比较序列里的每个元素。他可以得到比冒泡排序稍微好一点的效能,原因是冒泡排序只从一个方向进行比对(由低到高),每次循环只移动一个项目。 以序列(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 < $top; $i++) {
if(($arr[$i]>$arr[$i+1]&&$sort=='asc')||($arr[$i]<$arr[$i+1]&&$sort=='desc')){
$temp = $arr[$i+1];
$arr[$i+1] = $arr[$i];
$arr[$i] = $temp;
$sorted = false;//需要交换元素说明数组还没有被排序好
}
}
//然后再反向走一趟
//$top-1是因为拥有最大(小)值的元素已经在数组的顶端位置了
$top--;
for ($i = $top; $i > $bottom; $i--) {
if(($arr[$i]<$arr[$i-1]&&$sort=='asc')||($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实现]之鸡尾酒排序, 感谢原作者分享。
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号