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; 支持…

计算机缺少fixos.dll,fix_toolbox.dll

我该如何安装从金山毒霸下载的DLL文件&#xff1f;一&#xff1a;1、从金山毒霸下载压缩文件。2、将DLL文件解压到电脑上的某个地方。3、把该文件跟要求使用它的程序放在同一路径上。注意32位程序需要使用32位的DLL文件&#xff0c;64位程序需要使用64位的DLL文件。否则会出现0…

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】系…

python迭代器和for循环区别_python迭代器和for循环区别

迭代器(iterator):迭代器对象必须同时实现__iter__和__next__方法才是迭代器。对于迭代器来说&#xff0c;__iter__ 返回的是它自身 self&#xff0c;__next__ 则是返回迭代器中的下一个值,最后没有元素时&#xff0c;抛出异常(异常可以被开发者看到)。1.迭代器一定是可迭代对象…

python中代理模式分为几种_通俗 Python 设计模式——代理模式

今天来说一说代理模式。 代理模式顾名思义&#xff0c;是对资源进行代理访问的一种模式&#xff0c;这里的资源是泛指在程序中会使用到的数据、操作、过程、对象等等。当然&#xff0c;针对不同的资源&#xff0c;代理进行的操作不尽相同&#xff0c;根据前人的总结&#xff0c…

layer文件ajax上传,layer弹出层数据传输到content里面

在项目中使用layer弹出层的时候&#xff0c;遇到一个问题&#xff0c;就是利用ajax请求后台数据成功时&#xff0c;调用layer弹出层(iframe)&#xff0c;如何把数据传到iframe里面去&#xff1f;经过百度&#xff0c;发现&#xff0c;使用js把数据拼接起来&#xff0c;然后在su…

清理offset_关于 kafka 日志清理策略的问题

现象&#xff1a;搭建了一个 kafka 服务, 使用 kafka-python 包正常生产数据, 但是 kafka 过五分钟就把我的 topic 删除掉. 但是配置 log 的已经配置了, 我认为 kafka 不应该删除我的 topic 历史数据.关于 log 清理的配置文件:############################# Log Flush Policy …

python面向对象思路_python面向对象方法

#需求&#xff1a;洗衣机&#xff0c;功能&#xff1a;能洗衣服#1、定义洗衣机类"""class 类名()&#xff1a;代码"""classWasher():defwash(self):print("能洗衣服")#2 创建对象#对象名 类名()haier Washer()#3、验证成果#打印haier…

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

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

roads 构筑极致用户体验_万物互联大势所趋 华为保驾护航运营商“三个转型”...

随着通信技术及其应用的快速发展&#xff0c;人们发现物理世界和数字世界正在加速融合&#xff0c;数字经济正在改变和颠覆着传统市场格局。于是人们看到&#xff0c;电子商务、远程教育、远程医疗、物联网、大数据等等&#xff0c;一波接一波的商业浪潮不断涌现。然而支撑这一…

python列表字典_Python常用对字典、列表的操作

本文中使用的Python版本为3.x。合并两个列表方法一a [1, 2, 3]b [4, 5, 6]print(a b)print(a)print(b)输出结果为&#xff1a;[1,2,3,4,5,6][1,2,3][4,5,6]说明&#xff1a;“ab”后&#xff0c;a和b都没有变化。方法二a [1, 2, 3]b [4, 5, 6]a.extend(b)print(a)print(b)…

魔兽对战平台修改服务器数据,《魔兽争霸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;我们需要将一…