這裡以php作為描述語言較詳細講解堆排序原理,因保證程式可讀性,故不做優化,php程式中關於堆的一些概念如下:
假設n為當前陣列的key則,n的父節點為 n>>1 或者 n/2(整除);n的左子節點l= n<<1 或 l=n*2,n的右子節點r=(n<<1)+1 或 r=l+1
$arr=array(1,8,7,2,3,4,6,5,9);
陣列$arr的原形態結構如下:
&www.cppcns.comnbsp; 1
/
8 7
/ /
2 3 4 6
/ 5 9
heapsort($arr);print_r($arr);
排序後生成標準的小頂堆結構如下:
1/
2 3
/ /
4 5 6 7
/ 8 9
既陣列:array(1,2,3,4,5,6,7,8,9):
複製** **如下:
function heapsort(&$arr)
程式設計客棧 else
} //彈出第乙個陣列元素
array_shift($arr); }
//整理當前樹節點($n),臨界點$last之後為已排序好的元素
function adjustnode($n,$last,&$arr) }
//交換兩個值
function swap(&$a,&$b)
本文標題: php堆排序實現原理與應用方法
本文位址:
PHP實現堆排序
工作了,面試我工作這家公司時被技術面打擊得不行,因為自己的資料結構等基礎學得實在太差,雖然原來是想做設計師的說。不過看在php寫得還湊合的份上能來實習了,但還是決心惡補一下基礎。其實自己之前也確實感覺到了基礎的重要性,一些比較深的東西都比較底層,不學好根本沒法進行。像我之前用php做websocke...
php快速排序原理與實現方法分析
function partition n,left,right n left n lo n lo pivot return lo functi程式設計客棧on quicksort n,left,right global n dp 0 if left 快速排序是對氣泡排序的一種改進。它的基本思想是 通...
堆排序原理及實現
堆排序 堆排序是利用堆的性質進行的一種選擇排序。下面先討論一下堆。1.堆堆實際上是一棵完全二叉樹,其任何一非葉節點滿足性質 key i key 2i 1 key i key 2i 2 或者key i key 2i 1 key key 2i 2 即任何一非葉節點的關鍵字不大於或者不小於其左右孩子節點的...