PHP排序算法之简单选择排序(Simple Selection Sort)实例分析


Posted in PHP onApril 20, 2018

本文实例讲述了PHP排序算法之简单选择排序(Simple Selection Sort)。分享给大家供大家参考,具体如下:

基本思想:

通过 n - i 次关键字间的比较,从 n - i + 1 个记录中选出关键字最小的记录,并和第 i (1 <= i <= n) 个记录交换,执行n-1趟 后就完成了记录序列的排序。

算法实现:

<?php
//简单选择排序
//交换函数
function swap(array &$arr,$a,$b){
  $temp = $arr[$a];
  $arr[$a] = $arr[$b];
  $arr[$b] = $temp;
}
//简单选择排序算法
function SelectSort(array &$arr){
  $count = count($arr);
  for($i = 0;$i < $count - 1;$i ++){
    //记录第$i个元素后的所有元素最小值下标
    $min = $i;
    for($j = $i + 1;$j < $count;$j ++){
      if($arr[$j] < $arr[$min]){
        $min = $j;
      }
    }
    if($min != $i){
      swap($arr,$min,$i);
    }
  }
}
$arr = array(9,1,5,8,3,7,4,6,2);
SelectSort($arr);
var_dump($arr);

运行结果:

array(9) {
 [0]=>
 int(1)
 [1]=>
 int(2)
 [2]=>
 int(3)
 [3]=>
 int(4)
 [4]=>
 int(5)
 [5]=>
 int(6)
 [6]=>
 int(7)
 [7]=>
 int(8)
 [8]=>
 int(9)
}

复杂度分析:

在简单选择排序过程中,所需移动记录的次数比较少。最好情况下,即待排序记录初始状态就已经是正序排列了,则不需要移动记录。

最坏情况下,即待排序记录初始状态是按第一条记录最大,之后的记录从小到大顺序排列,则需要移动记录的次数最多为3(n-1)。简单选择排序过程中需要进行的比较次数与初始状态下待排序的记录序列的排列情况无关。当i=1时,需进行n-1次比较;当i=2时,需进行n-2次比较;依次类推,共需要进行的比较次数是(n-1)+(n-2)+…+2+1=n(n-1)/2,即进行比较操作的时间复杂度为O(n^2),进行移动操作的时间复杂度为O(n)

简单选择排序是不稳定排序。

本文参考自《大话数据结构》,在此仅作记录,方便以后查阅,大神勿喷!

PHP 相关文章推荐
php开发环境配置记录
Jan 14 PHP
PHP无限分类代码,支持数组格式化、直接输出菜单两种方式
May 18 PHP
使用PHP导出Word文档的原理和实例
Oct 21 PHP
PHP实现HTML生成PDF文件的方法
Nov 07 PHP
PHP魔术方法的使用示例
Jun 23 PHP
php计算税后工资的方法
Jul 28 PHP
PHP中调用C/C++制作的动态链接库的教程
Mar 10 PHP
php操作xml并将其插入数据库的实现方法
Sep 08 PHP
Laravel5中防止XSS跨站攻击的方法
Oct 10 PHP
PHP钩子与简单分发方式实例分析
Sep 04 PHP
php源码的使用方法讲解
Sep 26 PHP
PHP实现微信公众号验证Token的示例代码
Dec 16 PHP
PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
Apr 20 #PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
Apr 20 #PHP
PHP SPL 被遗落的宝石【SPL应用浅析】
Apr 20 #PHP
Laravel 加载第三方类库的方法
Apr 20 #PHP
PHP迭代器和迭代的实现与使用方法分析
Apr 19 #PHP
详解php curl带有csrf-token验证模拟提交方法
Apr 18 #PHP
php-app开发接口加密详解
Apr 18 #PHP
You might like
PHP获取网站域名和地址的代码
2008/08/17 PHP
PHP开发的一些注意点总结
2010/10/12 PHP
解析php中反射的应用
2013/06/18 PHP
深入file_get_contents与curl函数的详解
2013/06/25 PHP
PHP常用编译参数中文说明
2014/09/27 PHP
PHP中each与list用法分析
2016/01/08 PHP
php实现获取农历(阴历)、节日、节气的类与用法示例
2017/11/20 PHP
KindEditor在php环境下上传图片功能集成的方法示例
2020/07/20 PHP
JavaScript在Android的WebView中parseInt函数转换不正确问题解决方法
2015/04/25 Javascript
解决jquery中动态新增的元素节点无法触发事件问题的两种方法
2015/10/30 Javascript
JS实现网页上随机产生超链接地址的方法
2015/11/09 Javascript
AngularJS控制器继承自另一控制器
2016/05/09 Javascript
javascript读取文本节点方法小结
2016/12/15 Javascript
JS 调用微信扫一扫功能
2016/12/22 Javascript
vue component组件使用方法详解
2017/07/14 Javascript
Vue 利用指令实现禁止反复发送请求的两种方法
2019/09/15 Javascript
JavaScript计算出两个数的差值
2020/03/19 Javascript
vue缓存之keep-alive的理解和应用详解
2020/11/02 Javascript
Python实现生成简单的Makefile文件代码示例
2015/03/10 Python
python实现比较两段文本不同之处的方法
2015/05/30 Python
Python实现截屏的函数
2015/07/25 Python
python判断设备是否联网的方法
2018/06/29 Python
python、PyTorch图像读取与numpy转换实例
2020/01/13 Python
pyecharts绘制中国2020肺炎疫情地图的实例代码
2020/02/12 Python
如何清空python的变量
2020/07/05 Python
基于logstash实现日志文件同步elasticsearch
2020/08/06 Python
Python‘==‘ 及 ‘is‘相关原理解析
2020/09/05 Python
纯CSS3实现图片无间断轮播效果
2016/08/25 HTML / CSS
教师求职信范文分享
2013/12/27 职场文书
房屋出租协议书
2014/04/10 职场文书
政府绩效管理实施方案
2014/05/04 职场文书
低碳环保标语
2014/06/12 职场文书
单位委托书
2014/10/15 职场文书
自查自纠整改报告
2014/11/06 职场文书
当幸福来敲门英文观后感
2015/06/01 职场文书
20180830晚上第一届KSL半决赛 雨神vs解冻(二龙 三炮解说)
2022/04/01 星际争霸