排序,计算机科学中最常见的问题,面试的时候经常问到,如果要自己实现排序算法,肯定是可以的,只是需要一点时间而已,使用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。