diff --git a/Sorting Algorithms/php/heapSort.php b/Sorting Algorithms/php/heapSort.php new file mode 100644 index 0000000..4f9e603 --- /dev/null +++ b/Sorting Algorithms/php/heapSort.php @@ -0,0 +1,68 @@ += 0; $i--) { + buildHeap($array, $sizeArray, $i); + } + + for ($i = $sizeArray - 1; $i >= 0; $i--) { + $swap = $array[0]; + $array[0] = $array[$i]; + $array[$i] = $swap; + + buildHeap($array, $i, 0); + } + + return $array; +} + +function buildHeap(&$array, $heapSize, $node) +{ + $left = 2 * $node + 1; + $right = 2 * $node + 2; + $max = $node; + + do { + if ($left < $heapSize && $array[$left] > $array[$max]) { + $max = $left; + } + + if ($right < $heapSize && $array[$right] > $array[$max]) { + $max = $right; + } + + if ($max != $node) { + $swap = $array[$node]; + $array[$node] = $array[$max]; + $array[$max] = $swap; + + $left = 2 * $max + 1; + $right = 2 * $max + 2; + $node = $max; + } else { + break; + } + + if ($left >= $heapSize || $right >= $heapSize) { + break; + } + } while ($array[$left] > $array[$max] || $array[$right] > $array[$max]); +} +?> \ No newline at end of file