/** * 堆排序 * 基本思想: * 堆排序(HeapSort)是一树形选择排序。 * 在排序过程中,将R[l..n]看成是一棵完全二叉树的顺序存储结构, * 利用完全二叉树中双亲结点和孩子结点之间的内在关系, * 在当前无序区中选择关键字最大(或最小)的记录。 * * 根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最小者的堆称为小根堆。 * 根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最大者,称为大根堆。 */ function heapSort(array $list) { $length = count($list); buildHeap($list, $length - 1); while (--$length) { $temp = $list[0]; $list[0] = $list[$length]; $list[$length] = $temp; heapAdjust($list, 0, $length); } return $list; }
/** * Função de ordenação * @param array $vetor */ function heapSort(&$vetor) { for ($i = (int) ((count($vetor) - 1) / 2); $i >= 0; $i--) { $count = count($vetor) - 1; buildHeap($vetor, $i, $count); } for ($i = count($vetor) - 1; $i >= 1; $i--) { $aux = $vetor[0]; $vetor[0] = $vetor[$i]; $vetor[$i] = $aux; buildHeap($vetor, 0, $i - 1); } }