php 递归实现无限极分类和排序_PHP实现选择排序

这次说说选择排序。

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

基本思路

选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。

来一张示例动画图看一下

49cf36349272702984f763c7e4077889.gif

红色表示当前最小值,黄色表示已排序序列,蓝色表示当前位置。

复杂度分析

选择排序的交换操作介于 0 和 (n - 1) 次之间。选择排序的比较操作为 n (n - 1) / 2 次之间。选择排序的赋值操作介于 0 和 3 (n - 1) 次之间。
比较次数O(n^2),比较次数与关键字的初始状态无关,总的比较次数N=(n-1)+(n-2)+…+1=n*(n-1)/2。

交换次数O(n),最好情况是,已经有序,交换0次;最坏情况交换n-1次,逆序交换n/2次。交换次数比冒泡排序少多了,由于交换所需CPU时间比比较所需的CPU时间多,n值较小时,选择排序比冒泡排序快。

6b2d990c3843e72741dfc272c5881969.gif
时间复杂度    О(n²)
最优时间复杂度    О(n²)
平均时间复杂度    О(n²)
空间复杂度    О(n) total, O(1) auxiliary

百闻不如一run (php实现选择排序)

<?php/*** User: wujunze* Email: itwujunze@163.com* Blog: https://wujunze.com* Date: 2016/11/5**/function selectSort($arr) {//双重循环完成,外层控制轮数,内层控制比较次数$len=count($arr);for($i=0; $i<$len-1; $i++) {//先假设最小的值的位置$p = $i;for($j=$i+1; $j<$len; $j++) {//$arr[$p] 是当前已知的最小值if($arr[$p] > $arr[$j]) {//比较,发现更小的,记录下最小值的位置;并且在下次比较时采用已知的最小值进行比较。$p = $j;}}//已经确定了当前的最小值的位置,保存到$p中。如果发现最小值的位置与当前假设的位置$i不同,则位置互换即可。if($p != $i) {$tmp = $arr[$p];$arr[$p] = $arr[$i];$arr[$i] = $tmp;}}//返回最终结果return $arr;}var_dump(selectSort(array(4,66,3,23,91,36,88,6)));

代码运行结果

a7adb885536d6a2acd0cebefac2b2908.png
以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要请戳这里链接 或者关注咱们下面的专栏
PHP大神进阶​zhuanlan.zhihu.com
62ba65c133da1c203427534a03775cac.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532120.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

idea for循环快捷键_IDEA骚技巧,编码速度至少快一倍

IDEA是目前市场上最好用的IDE&#xff0c;公认的&#xff01;前几年eclipse在市场上非常流行&#xff0c;因此大多数人都习惯了eclipse的一些快捷键。近年来&#xff0c;随着IDEA的兴起&#xff0c;很多人都放弃了exlipse&#xff0c;进而选择了IDEA&#xff0c;但是有些人习惯…

从物联网到 3D 打印:硬件相关的开源项目概览 | 开源专题 No.52

arendst/Tasmota Stars: 20.4k License: GPL-3.0 Tasmota 是一款为 ESP8266 和 ESP32 设备提供的替代固件&#xff0c;具有易于配置的 webUI、OTA 更新、定时器或规则驱动的自动化功能以及通过 MQTT、HTTP、串口或 KNX 进行完全本地控制。该项目主要特点包括&#xff1a; 支持…

helm安装postgres_Helm 入门介绍 Kubernetes 上的包管理软件

这篇文章介绍一下云原生应用在 Kubernetes 上安装时&#xff0c;经常会用到的一个重要工具&#xff0c;Helm。Helm 是 Kubernetes 的包管理软件。提到包管理软件&#xff0c;很多人都不陌生。Maven、Gradle、pip、RubyGems 和 npm 都是包管理软件。作为一个包管理软件&#xff…

flutter 分割线_Flutter 底部弹框 showModalBottomSheet 使用Demo

题记—— 执剑天涯&#xff0c;从你的点滴积累开始&#xff0c;所及之处&#xff0c;必精益求精。Flutter是谷歌推出的最新的移动开发框架。【x1】微信公众号的每日提醒 随时随记 每日积累 随心而过 文章底部扫码关注【x2】各种系列的视频教程 免费开源 关注 你不会迷路【x3】系…

饥荒进地洞服务器无响应,饥荒联机洞穴设置及常见问题的解决方法

进阶篇服务端mod设置&#xff1a;首先(1)下载好要用mod&#xff0c;然后下载通用工具&#xff0c;解压放到DST的mod文件夹里运行(2)此时在文档\Klei\DoNotStarveTogether会多出一个文件modoverrides&#xff0c;把它复制到文档\klei\DoNotStarveTogether_EasyConfigCaves&#…

魔兽对战平台修改服务器数据,《魔兽争霸3》1.29补丁上线官方对战平台:平衡性大做改动...

IT之家3月1日消息 今天《魔兽争霸》官方微博宣布《魔兽争霸3》的最新补丁也就是1.29补丁已经登陆官方对战平台的PTR服务器上&#xff0c;想要尝鲜的用户可以前往官方对战平台进行更新和游玩。1.29补丁除了增加对于宽屏游戏的支持之外&#xff0c;还针对英雄单位进行平衡性的改动…

查询列名在哪张表_探索SQL-多表查询

一、表的加法&#xff08;Union&#xff09;1、用法&#xff1a;将两个表合并成一个表2、语句&#xff1a;select 查询结果 from 从哪张表查询 union select 查询结果 from 从哪张表查询*需保留重复行*select 查询结果 from 从哪张表查询 union all select 查询结果 from 从哪张…

使用未初始化的内存是什么意思_他们都说JVM能实际使用的内存比-Xmx指定的少?这是为什么呢...

这确实是个挺奇怪的问题&#xff0c;特别是当最常出现的几种解释理由都被排除后&#xff0c;看来JVM并没有耍一些明显的小花招&#xff1a;-Xmx和-Xms是相等的&#xff0c;因此检测结果并不会因为堆内存增加而在运行时有所变化。通过关闭自适应调整策略(-XX:-UseAdaptiveSizePo…

定义整型数组_C语言基础-数组怎么用

到目前为止&#xff0c;我们了解到C语言中可以使用整型&#xff0c;浮点型和字符型的数据类型来描述我们人类世界的各种数据&#xff0c;但是这些还远远不够……我们在IOT领域经常会遇到这样一个数据使用场景&#xff1a;某天的固定时间内&#xff0c;会有多台&#xff08;我们…

找出一个字符串中出现次数最多的字_海量数据中找出前k大数(topk问题)

在海量数据中找出出现频率最好的前k个数&#xff0c;或者从海量数据中找出最大的前k个数&#xff0c;这类问题通常被称为top K问题。针对top K类问题&#xff0c;通常比较好的方案是分治Trie树/hash小顶堆&#xff08;就是上面提到的最小堆&#xff09;&#xff0c;即先将数据集…

crowd counting_[crowd_counting]-SFCN-CVPR2019amp;amp;GCC dataset

1.Contribution&#xff08;1&#xff09;主要是提出了基于GTA5的GCC数据集数据集下载地址&#xff1a;https://gjy3035.github.io/GCC-CL/​gjy3035.github.io&#xff08;2&#xff09;提出了在如何在GCC上train&#xff0c;然后在传统的通用数据集上test的迁移学习方案&…

代码更换ui图片_用技术的方式,在UI设计稿中设置随机码,保证高清

本文首发于&#xff1a;行者AI 在工作中会遇到批量给图片添加文字&#xff0c;随机码等需求&#xff0c;当数据码数量较大时&#xff0c;UI的工作量就会非常大&#xff0c;这时候我们可以用python来帮我们提高工作效率。1. 需求分析我们有这样一张图片&#xff0c;我们需要将一…

hash地址_redis中的hash扩容、渐进式rehash过程

背景&#xff1a; redis字典&#xff08;hash表&#xff09;当数据越来越多的时候&#xff0c;就会发生扩容&#xff0c;也就是rehash对比&#xff1a;java中的hashmap&#xff0c;当数据数量达到阈值的时候(0.75)&#xff0c;就会发生rehash&#xff0c;hash表长度变为原来的二…

是什么牌子_水晶项链什么牌子好

阅读本文前&#xff0c;请您先点击上面的蓝色字体&#xff0c;再点击“关注”&#xff0c;这样您就可以免费收到最新内容了。每天都有分享&#xff0c;完全是免费订阅&#xff0c;请放心关注&#xff01; …

iframe异步加载_5种延迟加载图像的方法以帮助你提升网站性能与用户体验

英文 | https://www.sitepoint.com/five-techniques-lazy-load-images-website-performance/翻译 | web前端开发(ID&#xff1a;web_qdkf)由于图像是Web上最流行也是必不可少的内容类型之一&#xff0c;因此网站上的图片页面加载时间很容易成为一个问题。即使进行了适当的优化&…

springframework报错_应对报错信息的必杀技!

今天遇到了一个错误&#xff0c;一般的错误提示会很明显&#xff0c;一看就知道是什么问题。今天遇到的这个说实话真的不好找原因&#xff0c;一般在这种情况下该怎么解决呢&#xff1f;分享下我的思路吧&#xff0c;不一定是最好的&#xff0c;至少有用。直接上图吧&#xff0…

电脑运行卡顿怎么处理_【众点学】电脑运行PS卡顿?可能是你的虚拟内存没设置好!...

不少小伙伴都遇到过这样的烦恼明明自己的电脑拥有大内存PS用着用着就卡顿了经过教体君的仔(bai)细(du)研(yi)究(xia)发现原来电脑的 虚拟内存 只有2G当我们用大型软件或玩大型游戏电脑越用越卡时该怎么做&#xff1f;今天【众点学】我们一起来看看Win7和Win10系统下分别如何设置…

线程池拒绝策略 开发中常用什么策略_面试官:说说你知道多少种线程池拒绝策略...

往期文章为什么阿里Java规约要求谨慎使用SimpleDateFormathttps://www.toutiao.com/i6696127929048367629/为什么我强烈推荐你用枚举来实现单例模式https://www.toutiao.com/i6696861933687013901/为什么不要在MySQL中使用UTF-8编码方式https://www.toutiao.com/i6697966437727…

css html 双面打印_从 Linux 命令行进行打印 | Linux 中国

导读&#xff1a;在 Linux 命令行进行打印的内容比单单一个 lp 命令多得多&#xff0c;让我们来看一些可用选项。       本文字数&#xff1a;4305&#xff0c;阅读时长大约&#xff1a;5分钟https://linux.cn/article-13012-1.html作者&#xff1a;Sandra Henry-stocker译…

服务器内存超限问题_服务器内存爆满最佳处置方案

内存爆满截图&#xff1a;分析&#xff1a;内存持续飙升&#xff0c;应该是有大量内存一直没有释放&#xff0c;考虑僵尸对象&#xff0c;僵尸进程&#xff0c;最简单的就是重启服务器&#xff0c;但是就无法找到罪魁祸首了。验证&#xff1a;top命令查看活跃进程的资源使用情况…