PHP SPL神器實現堆排序

2022-02-15 14:39:51 字數 956 閱讀 1635

之前學習過內部排序的八大演算法,也一一寫過**實現。其中堆排序的原理是

將二叉樹初始化為堆可以看做從最後乙個非葉子結點開始,依次調整子堆的堆頂元素,重置堆是指重置堆頂元素。

這種演算法的實現如下:

<?php

#堆排序

function heapsort(&$arr)

}#初始化最大堆,從最後乙個非葉子節點開始,最後乙個非葉子節點編號為 陣列長度/2 向下取整

function initheap(&$arr)

}#調整節點

#@param $arr 待調整陣列

#@param $start 調整的父節點座標

#@param $end 待調整陣列結束節點座標

function ajustnodes(&$arr, $start, $end)

#如果待調整部分有右子節點

if($rightchildinx + 1 <= $len)

} }#交換父節點和最大節點

if($start != $maxinx) }}

$arr = array(1, 5, 3, 7, 9 ,10, 2, 8);

heapsort($arr);

print_r($arr);

?>

現在學了spl這種神器,看下如何實現堆排序:

<?php 

function splheapsort($arr)

while(!$heap->isempty())

return $res;

}$arr = array(2,5,9,1,4,7,3,4,6,0,1,2,4,6,8,9,2,3);

$arr = splheapsort($arr);

print_r($arr);

?>

什麼!!!這麼簡單??對,就是這麼簡單,不要問為什麼,強大,任性!

堆排序實現

今天抽空寫了個堆排序的演算法,廢話不多說,直接上源 include include includeusing namespace std define maxsize 6 void print int a,int size maxsize void percolate up int a,int si...

堆排序實現

1 堆排序演算法描述 1 定義 n個關鍵字序列kl,k2,kn稱為 heap 當且僅當該序列滿足如下性質 簡稱為堆性質 1 ki k 2i 且ki k 2i 1 1 i n 2 當然,這是小根堆,大根堆則換成 號。k i 相當於 二叉樹的非 葉子結點,k 2i 則是左子節點,k 2i 1 是右子節點...

實現堆排序

堆排序是在程式設計中經常用到的東西,在c 的stl底層裡面有make heap,push heap,pop heap 和 sort heap四個介面函式,我們用到的最多的是stl中的priority queue,其中的底層也是利用前面幾個函式實現的。下面我們就自己實現以下堆排序,主要包括調整堆結構,...