当前位置: 首页 > news >正文

计数排序php实现,PHP 计数排序 ,适用与范围内排序

// 计数排序算法

# 适用于一定范围内的排序

function countSort ($arr) {

$count = count($arr);

# 获取最大的元素max、min

$max = $min = $arr[0];

# 范围为min ~ max 构建统计数组

$new = [];

# 便利数组填充 统计数组

for ($j = 0; $j < $count; $j++) {

if ($arr[$j] > $max) {

$max = $arr[$j];

}

if ($arr[$j] < $min) {

$min = $arr[$j];

}

if (isset($new[ $arr[$j] ])) {

$new[$arr[$j]]++;

}else {

$new[$arr[$j]] = 1;

}

}

# 便利数组输出结果

$str = [];

for ($k = $min; $k <= $max; $k++) {

if ($new[$k] == 0) {

continue;

}

// echo $new[$k] . "\n";

$n = 0;

while ($n <= $new[$k] - 1) {

$n++;

array_push($str, $k);

}

}

return $str;

}

$arr = [4,4,6,5,3,2,8,1,7,5,6,0,10,9,4,6,3];

$res = countSort($arr);

print_r(implode(",", $res));

echo "\n";

// 优化 (针对重复值。稳定排序)

function newCountSort($arr) {

$count = count($arr);

# 获取最大、最小元素max、min

$max = $min = $arr[0];

for ($i = 0; $i < $count; $i++) {

if ($arr[$i] > $max) {

$max = $arr[$i];

}

if ($arr[$i] < $min) {

$min = $arr[$i];

}

}

// echo $max . "\t" . $min . "\n";die;

# 获取差值

$difference = $max - $min;

# 创建统计数组并统计对应元素个数(如果不减?默认已原值做键值)

$new = [];

for ($j = 0; $j < $count; $j++) {

if (isset($new[$arr[$j] - $min])) {

$new[$arr[$j] - $min]++;

}else {

$new[$arr[$j] - $min] = 1;

}

}

# 统计数组做变形,后面的元素等于前面的元素之和

$sum = 0;

for ($i = 0; $i <= $difference ; $i++) {

if(!isset($new[$i])) {

continue;

}

$sum += $new[$i];

$new[$i] = $sum;

}

# 倒序遍历原始数列,从统计数组找到正确位置,输出到结果数组

$sort_arr = [];

for ($j = $count - 1; $j >= 0; $j--) {

$sort_arr[$new[$arr[$j] - $min] - 1] = $arr[$j];

$new[$arr[$j] - $min]--;

}

ksort($sort_arr); // 这里循环输出结果

return $sort_arr;

}

$arr = [56,57,53,55,54,50,52,59,51,54];

$res = newCountSort($arr);

print_r(implode(",", $res));

echo "\n";

相关文章:

  • cheb2ord matlab,matlab在信号与图像处理中的应用第6章
  • php __call实现多继承,PHP通过_call实现多继承
  • php加水印二维码,php给图片加水印的代码
  • 跨数据库查询oracle,跨数据库查询(oracle跨数据库查询)
  • centos oracle home目录,CentOS下查找文件安装路径
  • oracle 同步索引,oracle数据库连表查询视图索引)
  • 整理oracle数据字典,oracle结构梳理---数据字典
  • oracle项目是啥,Oracle 基础知识其中七个主要项目
  • constel matlab,基于MATLAB环境下16QAM调制及解调仿真程序说明.doc
  • oracle 00947,ORA-00947: Not enough values 没有足够的值
  • nginx php 413,Nginx出现413 Request Entity Too Large错误
  • oracle重启配置服务,重启系统的时候自动启动oracle服务-安装配置
  • ORACLE---添加控制文件,Oracle数据库添加和移动控制文件
  • linux mongodb服务启动命令行,liunx 后台启动mongodb服务
  • 英灵神殿服务器linux,Valheim英灵神殿linux版本更新教程 服务器内游戏更新方法
  • hexo+github搭建个人博客
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • CSS实用技巧
  • Github访问慢解决办法
  • Java应用性能调优
  • Python进阶细节
  • Transformer-XL: Unleashing the Potential of Attention Models
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • windows-nginx-https-本地配置
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 记一次和乔布斯合作最难忘的经历
  • 使用 Docker 部署 Spring Boot项目
  • 微服务入门【系列视频课程】
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • #NOIP 2014# day.2 T2 寻找道路
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (Python第六天)文件处理
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (十六)一篇文章学会Java的常用API
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (转)Android学习笔记 --- android任务栈和启动模式
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET 5种线程安全集合
  • .net 发送邮件
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .net知识和学习方法系列(二十一)CLR-枚举
  • //解决validator验证插件多个name相同只验证第一的问题
  • :=
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思