Benim yığın sıralama ile yardıma ihtiyacı

3 Cevap php

Ben tür php çeşit burada öbek ile şaşırıp:

<?php
function heapSort($a, $count){
    $a = heapify($a, $count);

    $end = $count - 1;
    while ($end > 0){
        $temp = $a[$end];

        $a[$end] = $a[0] ;

        $a[0]= $temp;
        $end = $end - 1;
        siftDown($a, 0, $end);
    }
    return $a;
}


    function heapify($a,$count){
        $start = ($count - 2) / 2;

        while ($start >= 0){
            $a = siftDown($a, $start, $count-1);
            $start = $start - 1;
        }
        return $a;
    }


    function siftDown($a, $start, $end){
        $root = $start;

        while ($root * 2 + 1 <= $end){// While the root has at least one child
            $child = $root * 2 + 1;      // root*2+1 points to the left child
                                         //If the child has a sibling and the 
                                         //child's value is less than its
                                         //sibling's
            if ($child + 1 <= $end and $a[$child] < $a[$child + 1])
                $child = $child + 1;// then point to the right child instead)
            if ($a[$root] < $a[$child]){ // out of max-heap order
                  list($a[$child],$a[$root]) = array($a[$root],$a[$child]);
                $root = $child;      // repeat to continue sifting down
                                     // the child now
            }
            else {
                return $a;
    }}
    return $a;
    }


    $a = Array(3,1,5,2);
    $b = heapSort($a,count($a));
    print_r($b);
    ?>

Ben, diziyi sıralamak için ne yanlış herhangi bir fikir alamıyorum?

3 Cevap

siftDown () Eğer nedenle referans olarak geçmek zorunda içeri geçmek dizi değiştirmek için suposed edilir. Aksi takdirde fonksiyon verilerin bir kopyası üzerinde çalışacaktır.

function siftDown(&$a, $start, $end) {

Ben PHP uzman değilim, ama heapify doğru yapılır gibi görünmüyor - nasıl heapification siftDown çağrıları bir demet aşağı kaynatın ...? İkincisi heapify ilk etapta yığın değişmezleri kuran şeydir iken, (muhtemelen bir istisna dışında) bir yığın IS dizisi ile ilgili olduğunu varsayarak yazılmıştır ...

Ben bu heap Sort in php için basit kod olduğunu düşünüyorum