码迷,mamicode.com
首页 > 编程语言 > 详细

php实现堆排序

时间:2016-05-02 18:40:45      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

$arr = [9, 43, 12, 0, 87, 1];
function swap(&$arr, $i, $j){
    $tmp = $arr[$i];
    $arr[$i] = $arr[$j];
    $arr[$j] = $tmp;
}
//merge_sort($arr);
function heap_sort(&$arr){
    $len = count($arr) -1;
    $m = intval($len/2);
    //先构建一个大顶堆
    for($i = $m; $i >= 0; $i--){
        heap_adjust($arr, $i, $len);
    }
    //
    for($i = $len; $i > 0; $i--){
        echo "$i";
        swap($arr, 0, $i);
        heap_adjust($arr, 0, $i -1);
    }
}
/*
*$arr的$start+1到$end之间是一个大顶堆,新加的第一个元素,让这个元素从新成为一个大顶堆
*/
function heap_adjust(&$arr, $start, $end){
    if($start >= $end){
        return;
    }
    $tmp = $arr[$start];
    $i = $start;
    for($j = 2 * $start; $j <= $end; $j *=2 ){
        if($j+1 <= $end && $arr[$j+1] > $arr[$j]){
            $j++;
        }
        if($arr[$j] < $tmp){
            break;
        }
        $arr[$i] = $arr[$j];
        $i = $j;
    }
    $arr[$i] = $tmp;
}
heap_sort($arr);
var_export($arr);

 

php实现堆排序

标签:

原文地址:http://www.cnblogs.com/fengfengtk/p/5452770.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!