您的位置:首页 > 编程语言 > PHP开发

php算法-php实现快速排序算法

2014-02-22 17:01 399 查看
<?php
/*
*  快速排序是编程中经常使用到的一种排序方法,作为必须掌握的一种算法,这里将进行php的快速排序实现
*  快速排序的核心思想就是将一个数组中第一项作为中界,所有比这个数大的放在它的右边,小的放在左边
*  ,然后对其左边右边递归这个过程。
*/
main();

function main() {
$arr = array(3, 2, 5, 43, 23, 12, 32, 333, 4, 2, 4, 67, 100, 213);
$len = count($arr);
quick_sort($arr, $len);
print_r($arr);
}

/*
* @description 判断传入数据正确并调用自递归函数_quick_sort
* @params &$arr(整型数组引用),$len(数组长度)
*/

function quick_sort(&$arr, $len) {
if (empty($arr) || $len < 1) {
return;
}
_quick_sort($arr, 0, $len - 1);
}

/*
* @description 递归实现快速排序
* @params &$arr(整型数组引用),$start(数组开始索引值),$start(数组结束索引值)
*/

function _quick_sort(&$arr, $start, $end) {

if ($start >= $end)
return;
$middle = sort_middle($arr, $start, $end);
_quick_sort($arr, $start, $middle - 1); //分割线已左的继续进行排序
_quick_sort($arr, $middle + 1, $end); //分割线已右的继续进行排序
}

/*
* @description 接受整型数组,将所有比数组第一项小的数组放在左边,大的放在右边,最终数组第一项变成一个分割线,大的右边,小的左边
* @params &$arr(整型数组引用),$start(数组开始索引值),$start(数组结束索引值)
* @return int  分割数的位置
*/

function sort_middle(&$arr, $start, $end) {
//             $debug=debug_backtrace();  echo "<pre>"; print_r($debug); echo "</pre>";

$loop = $start + 1;
$tail = $end - $start;
$head = $start;
$temp = $arr;
$mid = $temp[$start];

while ($loop <= $end) {
if ($mid > $temp[$loop]) {
$arr[$head] = $temp[$loop];
$head++;
} else {
$arr[$start + $tail] = $temp[$loop];
$tail--;
}

$loop++;
}
$arr[$head] = $mid;
return $head;
}
?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: