關於PHP的排序,還有其他的辦法嗎?

排序,計算機科學中最常見的問題,面試的時候經常問到,如果要自己實現排序算法,肯定是可以的,只是需要一點時間而已,使用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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章