排序,計算機科學中最常見的問題,面試的時候經常問到,如果要自己實現排序算法,肯定是可以的,只是需要一點時間而已,使用PHP自帶的函數來進行排序,那自然是更加方便,各種sort用起來真是八仙過海各顯神通;但是除了各種sort之外,還有其他的辦法嗎?
今天看了一點PHP SPL的內容,於是就找到了數據結構中一個非常有用的東西:堆。
在SPL提供的堆數據結構中,有SplHeap、SplMaxHeap、SplMinHeap三個類,而SplMaxHeap和SplMinHeap就是可以用來做排序的好東西!
根據最大堆/最小堆的定義——http://zh.wikipedia.org/wiki/%E6%9C%80%E5%A4%A7%EF%BC%8F%E6%9C%80%E5%B0%8F%E5%A0%86,我們向堆中放入數據之後,直接取值時就已經排好順序了。
下面來看看測試代碼:
<?php
require dirname(__FILE__)."/function.php";
$minHeap = new SplMinHeap();
$maxHeap = new SplMaxHeap();
for ($i=1; $i<=10; $i++) {
$minHeap->insert(rand(1, 1000));
$maxHeap->insert(rand(1, 1000));
}
pr("min heap!");
pr($minHeap);
foreach ($minHeap as $value) {
pr($value);
}
pr("max heap!");
pr($maxHeap);
foreach ($maxHeap as $value) {
pr($value);
}
分別看看結果:
完全排好序了,一點也不用操心。
除了方便的排序之外,使用SPL還能提供方便的測試,應該在以後的工作中越來越多地使用SPL。