php 快速排序的算法
快速排序的算法 PHP的递归效率一般认为是低效的。大概一年前,我写了一篇博文,对三种遍历树的方法进行了比较,发现递归算法的效率最低。[http://www.cnblogs.com/niniwzw/archive/2008/06/28/
PHP的递归效率一般认为是低效的。大概一年前,我写了一篇博文,对三种遍历树的方法进行了比较,发现递归算法的效率最低。
http://www.cnblogs.com/niniwzw/archive/2008/06/28/1231410.html
而且是差了3倍的效率。所以,PHP中的递归一定要小心的对待。
最近写了一个快速排序的算法,发现PHP中的递归效率不能一刀切,在各种不同的服务器中,可能会表现不一样。
function qsort(&$arr) { _quick_sort($arr, 0, count($arr) - 1); } /** * 采用递归算法的快速排序。 * * @param array $arr 要排序的数组 * @param int $low 最低的排序子段 * @param int $high 最高的排序字段 */ function _quick_sort(&$arr, $low, $high) { $low_data = $arr[$low]; $prev_low = $low; $prev_high = $high; while ($low < $high) { while ($arr[$high] >= $low_data && $low < $high) { $high--; } if ($low < $high) { $arr[$low] = $arr[$high]; $low++; } while ($arr[$low] <= $low_data && $low < $high) { $low++; } if ($low < $high) { $arr[$high] = $arr[$low]; $high--; } } $arr[$low] = $low_data; if ($prev_low < $low) { _quick_sort($arr, $prev_low, $low); } if ($low + 1 < $prev_high) { _quick_sort($arr, $low + 1, $prev_high); } } function quick_sort(&$arr) { $stack = array(); array_push($stack, 0); array_push($stack, count($arr) -1); while (!empty($stack)) { $high = array_pop($stack); $low = array_pop($stack); $low_data = $arr[$low]; $prev_low = $low; $prev_high = $high; while ($low < $high) { while ($arr[$high] >= $low_data && $low < $high) { $high--; } if ($low < $high) { $arr[$low] = $arr[$high]; $low++; } while ($arr[$low] <= $low_data && $low < $high) { $low++; } if ($low < $high) { $arr[$high] = $arr[$low]; $high--; } } $arr[$low] = $low_data; if ($prev_low < $low) { array_push($stack, $prev_low); array_push($stack, $low); } if ($low + 1 < $prev_high) { array_push($stack, $low + 1); array_push($stack, $prev_high); } } } //该片段来自于http://outofmemory.cn
精彩图集
精彩文章