这次说说选择排序。

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

基本思路

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

来一张示例动画图看一下

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

复杂度分析

选择排序的交换操作介于 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值较小时,选择排序比冒泡排序快。

时间复杂度    О(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)));

代码运行结果

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

PHP大神进阶​zhuanlan.zhihu.com

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

  1. PHP递归实现无限极分类

    PHP递归实现无限极分类 摘要 今天在编码的时候要用到二级的栏目分类,所以顺便就把无限极分类给整理了一下,采用的是递归方法 //实现无限级分类public function getTree(){$ca ...

  2. php实现无限分类超牛逼,PHP超牛逼无限极分类生成树方法_php技巧

    你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了. 这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,巧在引用,整理分享了. 代码如下: fun ...

  3. php 递归实现无限极分类和排序_无限极分类的两种方式,递归和引用

    说到无限极分类,比较常见的做法是在建表的时候,增加一个parnet_id字段用来区别自己所属的分类(是顶级分类还是子分类) 由于展示数据的时候,需要表达出这种所属关系,所以必然要在读取数据的时候进行一 ...

  4. php 递归实现无限极分类和排序_php 无限极分类以及使用递归实现的排序方法

    至于添加删除之类的功能我就不多写了!仔细看看就知道这么用了. 难的是显示方面 希望高手扩展一下! 这是类 代码如下:<?php /*=============================== ...

  5. php 递归实现无限极分类和排序_Laravel框架实现无限极分类

    php中文网最新课程 每日17点准时技术干货分享 最近开发商品功能,在尝试递归和引用方式后,蓦然回首,突然发现laravel框架有更简单高效的实现方式,无限极分类最佳实践,open code与大家共享 ...

  6. php无极分类非递归_无限极分类算法,对你一定有帮助

    无限级分类是开发中常见的情况,也经常会在面试,主考官问到,笔试中遇到,因此本文对常见的无限极分类算法进行总结归纳,其实大多数就是迭代与递归. 1.循环迭代实现 $arr = [1=>['id'= ...

  7. php不使用递归实现无限极分类

    无限极分类常用的是递归,但是比较不好理解,其实可以用数据库path,pid两个字段的设计来实现无限分类的功能 1.数据库设计 通过上图可以看出pid就是该栏目的父id,而path = 父path+pi ...

  8. php 递归实现无限极分类和排序_PHP无限级分类实现层级值间用字符串拼接

    题目: 如下数组,实现这么一个结果value=10-101-1011,label=万达-蜘蛛侠-已购票,其实就是层级值间用字符串拼接. $example=array(array('value'=> ...

  9. php 递归实现无限极分类和排序_php递归无限极分类

    递归无限级分类有几种形式,我这里仅仅举例比較经常使用的三种: 第一种:返回有排序的数组: $data = array( 1 => array( 'id' => 1, 'pid' => ...

最新文章

  1. 【js】将json类型的数组或对象转为字符串
  2. 简历受HR欢迎的四大特点
  3. Apollo核心概念
  4. 力争营收渠道多样化,Line 向自拍应用 Snow 投资 4500 万美元
  5. mysql5.6.13_MySQL-5.6.13解压版(zip版)安装配置教程
  6. C++虚函数表和多态
  7. java8 groupingby_Java8 教程第五章之Streams Collectors groupingBy
  8. linux service命令解析(重要)
  9. PAT-乙级-1009. *说反话 (20)
  10. 使用sp_monitor 查看SQL Server统计信息
  11. 小爬爬1:jupyter简单使用爬虫相关概念
  12. 从大整数乘法的实现到 Karatsuba 快速算法
  13. k8s重要概念及部署k8s集群
  14. Cooling-Shrinking Attack: Blinding the Tracker with Imperceptible Noises
  15. oem和odm是什么意思?oem与odm区别是什么?
  16. html实现播放暂停,html如何实现播放和暂停
  17. 解决 Error starting userland proxy: listen tcp 0.0.0.0:6379: bind: address already in use
  18. Python 数据挖掘之中医证型关联规则挖掘
  19. 32位系统的X86到底能支持多大内存
  20. ResNet网络的改进版:ResNeXt

热门文章

  1. mybatis:在springboot中的配置
  2. 解决在已办任务菜单中都会抛出异常,由于definitionId=undefined导致的问题
  3. SpringBoot入门到精通_第2篇 _1分钟实战需求项目
  4. 实战04_redis-cluster集群搭建
  5. JBOSS7启动与关闭
  6. ppt护理文书流程图_护理文书书品管圈ppt
  7. 万用表怎么测电池内阻_数字万用表和指针万用表,两者怎么选?
  8. oracle数据库并行数限制,Oracle数据库并行处理技术详解(上)
  9. hilbert谱 matlab,怎么在matlab中做信号hilbert边际谱分析
  10. linux中ssh启动报错,Linux(Ubuntu18)中启动ssh时的报错