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中MVC模式的模板引擎开发经验分享
Mar 23 PHP
laravel安装zend opcache加速器教程
Mar 02 PHP
Laravel 5框架学习之表单
Apr 08 PHP
php curl 上传文件代码实例
Apr 27 PHP
老版本PHP转义Json里的特殊字符的函数
Jun 08 PHP
PHP弹出对话框技巧详细解读
Sep 26 PHP
php生成4位数字验证码的实现代码
Nov 23 PHP
CodeIgniter自定义控制器MY_Controller用法分析
Jan 20 PHP
PHP中常用的数组操作方法笔记整理
May 16 PHP
PHP中include/require/include_once/require_once使用心得
Aug 28 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
Apr 30 PHP
php实现商城购物车的思路和源码分析
Jul 23 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&amp;mysql(三)
2006/10/09 PHP
php中导出数据到excel时数字变为科学计数的解决方法
2013/02/03 PHP
php基于base64解码图片与加密图片还原实例
2014/11/03 PHP
php判断表是否存在的方法
2015/06/18 PHP
PHP利用APC模块实现大文件上传进度条的方法
2015/10/29 PHP
是 WordPress 让 PHP 更流行了 而不是框架
2016/02/03 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
ThinkPHP实现的rsa非对称加密类示例
2018/05/29 PHP
PHP字符串中抽取子串操作实例分析
2019/06/22 PHP
jquery.artwl.thickbox.js  一个非常简单好用的jQuery弹出层插件
2012/03/01 Javascript
js带按钮的提示框可供选择示例代码
2013/09/17 Javascript
JavaScript之IE的fireEvent方法详细解析
2013/11/20 Javascript
jQuery中:enabled选择器用法实例
2015/01/04 Javascript
Node.js+Express配置入门教程详解
2016/05/19 Javascript
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
2017/08/17 Javascript
AngularJS中controller控制器继承的使用方法
2017/11/03 Javascript
jQuery.validate.js表单验证插件的使用代码详解
2018/10/22 jQuery
实现Vue的markdown文档可以在线运行的方法示例
2018/12/11 Javascript
vue+iview 兼容IE11浏览器的实现方法
2019/01/07 Javascript
layui问题之渲染数据表格时,仅出现10条数据的解决方法
2019/09/12 Javascript
JQuery使用属性addClass、removeClass和toggleClass实现增加和删除类操作示例
2019/11/18 jQuery
python 实现插入排序算法
2012/06/05 Python
pycharm重置设置,恢复默认设置的方法
2018/10/22 Python
python 阶乘累加和的实例
2019/02/01 Python
使用python获取(宜宾市地震信息)地震信息
2019/06/20 Python
python实现FTP循环上传文件
2020/03/20 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
2020/10/18 Python
利用python制作拼图小游戏的全过程
2020/12/04 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
2020/12/07 Python
澳大利亚在线奢侈品时尚零售平台:Azura Runway
2021/01/13 全球购物
摩飞电器俄罗斯官方网站:Morphy Richards俄罗斯
2020/07/30 全球购物
如何从一个文件档案的尾端新增记录
2016/12/02 面试题
总经理秘书工作职责
2013/12/26 职场文书
三八妇女节新闻稿
2015/07/17 职场文书
技能培训通讯稿
2015/07/18 职场文书
中国现代文学之经典散文三篇
2019/09/18 职场文书