计数排序只适合使用在键的变化不大于元素总数的情况下。它通常用作另一种排序算法(基数排序)的子程序,这样可以有效地处理更大的键。
总之,计数排序是一种稳定的线性时间排序算法。计数排序使用一个额外的数组C ,其中第i个元素是待排序数组 A中值等于 i的元素的个数。然后根据数组C 来将A中的元素排到正确的位置。
通常计数排序算法的实现步骤思路是:
1.找出待排序的数组中最大和最小的元素;
2.统计数组中每个值为i的元素出现的次数,存入数组C的第i项;
3.对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加);
4.反向填充目标数组:将每个元素i放在新数组的第C[i]项,每放一个元素就将C[i]减去1。
PHP计数排序算法的实现代码示例如下:
<"原始数组 :\n"; echo implode(', ',$test_array ); echo "\n排序后数组\n:"; echo implode(', ',counting_sort($test_array, -1, 5)). PHP_EOL;
输出:
原始数组 : 3, 0, 2, 5, -1, 4, 1
排序后数组 :-1, 0, 1, 2, 3, 4, 5
下面补充一个例子
1、计数排序只适用于整数在小范围内排序
<"RuntimeException: ".$re->getMessage()."\n"; } print_r($splfixed->toArray()); } countSort($arr); "htmlcode">class CountSort { private $originalData = []; private $rangeMap = []; private $resultData = []; public function __construct($original = []) { $this->originalData = $original; } public function sort() { list($min, $max) = $this->calculateDataRange(); $this->statisticNumberOfOccurrence($min, $max); $this->resultData = $this->generateResult(); return $this->resultData; } protected function calculateDataRange() { $max = null; $min = null; foreach ($this->originalData as $value) { if (!is_null($max)) { if ($value > $max) { $max = $value; } } else { $max = $value; } if (!is_null($min)) { if ($value < $min) { $min = $value; } } else { $min = $value; } } return [$min, $max]; } protected function statisticNumberOfOccurrence($min, $max) { for ($i = $min; $i <= $max; $i++) { $this->rangeMap[$i] = 0; } foreach ($this->originalData as $value) { $this->rangeMap[$value]++; } } protected function generateResult() { $result = []; foreach ($this->rangeMap as $key => $value) { if ($value != 0) { for ($i = 0; $i < $value; $i++) { array_push($result, $key); } } } return $result; } } $testData = [2, 3, 4, 3, 10, 30, 20, 15, 10, 12, 33]; $countSort = new CountSort($testData); echo '<pre>'; var_dump($countSort->sort());输出
<pre>array(11) {
[0]=>
int(2)
[1]=>
int(3)
[2]=>
int(3)
[3]=>
int(4)
[4]=>
int(10)
[5]=>
int(10)
[6]=>
int(12)
[7]=>
int(15)
[8]=>
int(20)
[9]=>
int(30)
[10]=>
int(33)
}
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
暂无评论...
更新日志
2024年11月29日
2024年11月29日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]