无为清净楼资源网 Design By www.qnjia.com
计数排序只适合使用在键的变化不大于元素总数的情况下。它通常用作另一种排序算法(基数排序)的子程序,这样可以有效地处理更大的键。
总之,计数排序是一种稳定的线性时间排序算法。计数排序使用一个额外的数组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)
}
标签:
php计数排序
无为清净楼资源网 Design By www.qnjia.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
无为清净楼资源网 Design By www.qnjia.com
暂无评论...
更新日志
2024年09月25日
2024年09月25日
- 《叶倩文 真心真意过一生》[WAV+CUE][400MB]
- 潘越云.1985-世间女子(滚石25周年经典复刻版)【滚石】【WAV+CUE】
- 陈柏宇.2009-CANT.BE.HALF【SONY】【WAV+CUE】
- 李明依.1989-小女生【滚石】【WAV+CUE】
- 《李荣浩 新时代创作新人王》[WAV分轨][310MB]
- 《黑鸭子与马头琴 史上最动听草原音乐》[WAV+CUE][320MB]
- 《汽车发烧音乐精选CD18》[FLAC+CUE][7.1G]
- 郑希怡.2004-Perfect.Date【英皇娱乐】【FLAC分轨】
- 群星.1994-宝丽金超级孖宝2CD【宝丽金】【WAV+CUE】
- 林忆莲.2019-0(2023精装版)【环球】【WAV+CUE】
- Supper.Moment.2016-The.Moment【寰亚】【FLAC分轨】
- 范莉丝.1979-送郎一朵牵牛花(LP版)【大联机构】【WAV+CUE】
- 刘宇.2024-宇宙诗人【哔哟哔哟文化】【FLAC分轨】
- 《全景声白噪音》沉浸式大自然助眠 带你听自然的声音[mp3]
- 纯音入心系列纯音乐《古筝精选 十指弹一赏心曲一心奏出世人心》1CD[MP3][582MB]