the-jj / spl-collections-sort
Spl数据结构的排序辅助库
1.0.3
2017-10-16 10:45 UTC
Requires
- php: >=5.6
Requires (Dev)
- phpunit/phpunit: ^5.7
This package is not auto-updated.
Last update: 2024-09-29 03:06:01 UTC
README
提供多种排序SPL数据结构的方法。目前仅支持
基本用法
所有排序算法都接受
插入排序
$splFixedArray = SplFixedArray::fromArray([5, 3, 8, 6, 0, 4]); SplFixedArraySort::insertionSort($splFixedArray); var_dump($splFixedArray->toArray()); // [0, 3, 4, 5, 6, 8]
自定义比较函数
$splFixedArray = SplFixedArray::fromArray([5, 3, 8, 6, 0, 4]); SplFixedArraySort::insertionSort($splFixedArray, function($a, $b) { if ($a < $b) return 1; if ($a > $b) return -1; return 0; }); var_dump($splFixedArray->toArray()); // [8, 6, 5, 4, 3, 0]
边界
此外,插入排序还接受两个额外的参数 - 边界$low和$high
$splFixedArray = SplFixedArray::fromArray([5, 3, 8, 6, 0, 4]); SplFixedArraySort::insertionSort($splFixedArray, null, 2, 4); var_dump($splFixedArray->toArray()); // [5, 3, 0, 6, 8, 4]
快速排序
使用非递归实现,这使得它适用于对大数组进行排序。当达到5个元素或更小的子集时,回退到插入排序。
$splFixedArray = SplFixedArray::fromArray([5, 3, 8, 6, 0, 4]); SplFixedArraySort::quickSort($splFixedArray); var_dump($splFixedArray->toArray()); // [0, 3, 4, 5, 6, 8]
自定义比较函数
$splFixedArray = SplFixedArray::fromArray([5, 3, 8, 6, 0, 4]); SplFixedArraySort::quickSort($splFixedArray, function($a, $b) { if ($a < $b) return 1; if ($a > $b) return -1; return 0; }); var_dump($splFixedArray->toArray()); // [8, 6, 5, 4, 3, 0]
归并排序
使用自下而上(非递归)的实现。
用法?你猜对了
$splFixedArray = SplFixedArray::fromArray([5, 3, 8, 6, 0, 4]); SplFixedArraySort::mergeSort($splFixedArray); var_dump($splFixedArray->toArray()); // [0, 3, 4, 5, 6, 8]
自定义比较函数
$splFixedArray = SplFixedArray::fromArray([5, 3, 8, 6, 0, 4]); SplFixedArraySort::mergeSort($splFixedArray, function($a, $b) { if ($a < $b) return 1; if ($a > $b) return -1; return 0; }); var_dump($splFixedArray->toArray()); // [8, 6, 5, 4, 3, 0]
数组排序
还有一个排序方法 - 数组排序,它使用PHP的sort()(或usort())方法。用法与上述算法相同
$splFixedArray = SplFixedArray::fromArray([5, 3, 8, 6, 0, 4]); SplFixedArraySort::arraySort($splFixedArray); var_dump($splFixedArray->toArray()); // [0, 3, 4, 5, 6, 8]
自定义比较函数
$splFixedArray = SplFixedArray::fromArray([5, 3, 8, 6, 0, 4]); SplFixedArraySort::arraySort($splFixedArray, function($a, $b) { if ($a < $b) return 1; if ($a > $b) return -1; return 0; }); var_dump($splFixedArray->toArray()); // [8, 6, 5, 4, 3, 0]
为什么?
当使用常规PHP数组时,我们提供了一个庞大的数组(不是字面上的意思)的排序函数。然而,在原始PHP中,没有为SplFixedArray对象提供类似的功能。
这个库就是为了改变这一点。目前它提供了几种排序
安装
composer require the-jj/spl-collections-sort