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 目录与文件处理-郑阿奇(续)
Jul 04 PHP
php牛逼的面试题分享
Jan 18 PHP
php中获取主机名、协议及IP地址的方法
Nov 18 PHP
你应该知道PHP浮点数知识
May 13 PHP
php parse_str() 函数的定义和用法
May 23 PHP
php基于单例模式封装mysql类完整实例
Oct 18 PHP
PHP与SQL语句常用大全
Dec 10 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
Jun 07 PHP
Laravel给生产环境添加监听事件(SQL日志监听)
Jun 19 PHP
laravel如何开启跨域功能示例详解
Aug 31 PHP
PHP explode()函数用法讲解
Feb 15 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
Mar 26 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
不用数据库的多用户文件自由上传投票系统(2)
2006/10/09 PHP
PHP IPV6正则表达式验证代码
2010/02/16 PHP
PHP 网络开发详解之远程文件包含漏洞
2010/04/25 PHP
PHP设计模式之迭代器模式的深入解析
2013/06/13 PHP
解析php框架codeigniter中如何使用框架的session
2013/06/24 PHP
准确获得页面、窗口高度及宽度的JS
2006/11/26 Javascript
jQuery 树形结构的选择器
2010/02/15 Javascript
jquery获取table中的某行全部td的内容方法
2013/03/08 Javascript
jQuery如何获取同一个类标签的所有值(默认无法获取)
2014/09/25 Javascript
JavaScript函数学习总结以及相关的编程习惯指南
2015/11/16 Javascript
网页前端登录js按Enter回车键实现登陆的两种方法
2016/05/10 Javascript
JS使用onerror捕获异常示例
2016/08/03 Javascript
JavaScript中数据类型转换总结
2016/12/25 Javascript
vue2项目使用sass的示例代码
2017/06/28 Javascript
node.js中路由,中间件,ge请求和post请求的参数详解
2017/12/26 Javascript
Python求两个list的差集、交集与并集的方法
2014/11/01 Python
Python序列之list和tuple常用方法以及注意事项
2015/01/09 Python
python中反射用法实例
2015/03/27 Python
利用Python获取赶集网招聘信息前篇
2016/04/18 Python
利用python实现命令行有道词典的方法示例
2017/01/31 Python
python操作xlsx文件的包openpyxl实例
2018/05/03 Python
python 使用re.search()筛选后 选取部分结果的方法
2018/11/28 Python
Python编程在flask中模拟进行Restful的CRUD操作
2018/12/28 Python
解决Python安装时报缺少DLL问题【两种解决方法】
2019/07/15 Python
python3 dict ndarray 存成json,并保留原数据精度的实例
2019/12/06 Python
python给list排序的简单方法
2020/12/10 Python
Python实例教程之检索输出月份日历表
2020/12/16 Python
面向中国市场的在线海淘美妆零售网站:Beauty House美丽屋
2021/03/02 全球购物
护士岗位求职应聘自荐书范文
2014/02/12 职场文书
销售岗位职责范本
2014/06/12 职场文书
人力资源职位说明书
2014/07/29 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
2015年银行信贷员工作总结
2015/05/19 职场文书
PHP对接阿里云虚拟号的实现(号码隐私保护)
2021/04/06 PHP
浅谈pytorch中stack和cat的及to_tensor的坑
2021/05/20 Python
JavaScript架构localStorage特殊场景下二次封装操作
2022/06/21 Javascript