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 相关文章推荐
PHPShop存在多个安全漏洞
Oct 09 PHP
层叠菜单的动态生成
Oct 09 PHP
模拟OICQ的实现思路和核心程序(三)
Oct 09 PHP
超级好用的一个php上传图片类(随机名,缩略图,加水印)
Jun 30 PHP
PHP 遍历文件实现代码
May 04 PHP
深入php常用函数的使用汇总
Jun 08 PHP
PHP中实现接收多个name相同但Value不相同表单数据实例
Feb 03 PHP
PHP中实现crontab代码分享
Mar 26 PHP
PHP使用Redis替代文件存储Session的方法
Feb 15 PHP
PHP使用xpath解析XML的方法详解
May 20 PHP
laravel 解决Validator使用中出现的问题
Oct 25 PHP
php实现文件上传基本验证
Mar 04 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
一个odbc连mssql分页的类
2006/10/09 PHP
PHP 数据库树的遍历方法
2009/02/06 PHP
php安全配置 如何配置使其更安全
2011/12/16 PHP
php实现图片局部打马赛克的方法
2015/02/11 PHP
php实现购物车功能(上)
2020/07/23 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
2016/03/22 PHP
在laravel5.2中实现点击用户头像更改头像的方法
2019/10/14 PHP
PHP接入支付宝接口失效流程详解
2020/11/10 PHP
javascript for循环设法提高性能
2010/02/24 Javascript
js实时获取系统当前时间实例代码
2013/06/28 Javascript
使用js正则控制input标签只允许输入的值
2013/07/29 Javascript
JQuery中对Select的option项的添加、删除、取值
2013/08/25 Javascript
js改变透明度实现轮播图的算法
2020/08/24 Javascript
浅谈jquery采用attr修改form表单enctype不起作用的问题
2016/11/25 Javascript
移动端刮刮乐的实现方式(js+HTML5)
2017/03/23 Javascript
vue.js实现只弹一次弹框
2018/01/29 Javascript
vue2.0+koa2+mongodb实现注册登录
2018/04/10 Javascript
Vue项目接入Paypal实现示例详解
2020/06/04 Javascript
[02:57]DOTA2英雄基础教程 风行者
2014/01/16 DOTA
Python中字典和JSON互转操作实例
2015/01/19 Python
python装饰器-限制函数调用次数的方法(10s调用一次)
2018/04/21 Python
详解Python中的四种队列
2018/05/21 Python
Flask之pipenv虚拟环境的实现
2019/11/26 Python
Python动态强类型解释型语言原理解析
2020/03/25 Python
Python使用Selenium实现淘宝抢单的流程分析
2020/06/23 Python
全球速卖通巴西站点:Aliexpress巴西
2016/08/24 全球购物
德国高性价比网上药店:medpex
2017/07/09 全球购物
美国独家设计师眼镜在线光学商店:Glasses Gallery
2017/12/28 全球购物
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
影视艺术学院毕业生自荐信
2013/11/13 职场文书
DIY蛋糕店的创业计划书范文
2013/12/26 职场文书
银行优秀员工事迹
2014/02/06 职场文书
职务聘任书范文
2014/03/29 职场文书
创建青年文明号材料
2014/05/09 职场文书
MySQL慢查询的坑
2021/04/28 MySQL
使用python求解迷宫问题的三种实现方法
2022/03/17 Python