/*
* 快速排序是编程中经常使用到的一种排序方法,作为必须掌握的一种算法,这里将进行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 "
"; print_r($debug); echo "";
$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;
}
?>