PHP 演算法 堆排序的PHP實現

2022-01-30 18:59:59 字數 1285 閱讀 3339

1.堆(二叉堆):可以視為一棵完全的二叉樹,除了最底層之外,每一層都是滿的,這使得堆可以利用陣列來表示,每乙個結點對應陣列中的乙個元素

2.給出某個結點的下標,可以計算出父結點的和孩子結點的下標; parent(i)=floor(i/2) left(i)=2i+1 right=2i+2

3.最大堆和最小堆,最大堆:根結點是最大值,最小堆:根結點是最小值

4.堆排序就是把最大堆堆頂的最大數取出,剩餘的堆繼續調整為最大堆,再次將堆頂的最大數取出,直到剩餘數只有乙個結束

5.最大堆調整(維護最大堆,子節點永遠小於父結點) ;建立最大堆(把乙個陣列調整成最大堆的陣列);堆排序(建立最大堆,交換,維護最大堆)

maxheapify (

array,index,heapsize) //

最大堆調整

imax,ileft,iright

while

true

imax=index;ileft=2*index+1;iright=2*index+2如果根結點小於左右子樹裡結點值,就交換一下這兩個值

利用第三方變數,交換下兩個值

buildmaxheap(

array) //

建立最大堆,把乙個陣列調整成最大堆的陣列

iparent=floor((size-1)/2)

for i=iparent;i>=0;i--maxheapify (

array,i,size)

sort

(arr)

buildmaxheap(

array, heapsize);//

建立最大堆

for (int i = heapsize - 1; i > 0; i--)

//排序的入口函式

function heapsort(&$arr

) }//

建立最大堆的函式

function buildmaxheap(&$arr, $heapsize

) }//

維護最大堆

function maxheapify(&$arr,$index,$heapsize

)

if($iright

<$heapsize && $arr[$iright]>$arr[$imax

])

if($imax!=$index

)else

}

}$arr=array(2,1,3,5,9,6);

heapsort(

$arr

);var_dump($arr);

PHP 演算法 堆排序的PHP實現

1.堆 二叉堆 可以視為一棵完全的二叉樹,除了最底層之外,每一層都是滿的,這使得堆可以利用陣列來表示,每乙個結點對應陣列中的乙個元素 2.給出某個結點的下標,可以計算出父結點的和孩子結點的下標 parent i floor i 2 left i 2i right 2i 1 3.最大堆和最小堆,最大堆...

PHP實現堆排序

工作了,面試我工作這家公司時被技術面打擊得不行,因為自己的資料結構等基礎學得實在太差,雖然原來是想做設計師的說。不過看在php寫得還湊合的份上能來實習了,但還是決心惡補一下基礎。其實自己之前也確實感覺到了基礎的重要性,一些比較深的東西都比較底層,不學好根本沒法進行。像我之前用php做websocke...

堆以及php實現堆排序

什麼是堆 這裡的堆 二叉堆 指得不是堆疊的那個堆,而是一種資料結構。堆可以視為一棵完全的二叉樹,完全二叉樹的乙個 優秀 的性質是,除了最底層之外,每一層都是滿的,這使得堆可以利用陣列來表示,每乙個結點對應陣列中的乙個元素.陣列與堆之間的關係 二叉堆一般分為兩種 最大堆和最小堆。什麼是最大堆 堆中每個...