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.NET的入门教程
Oct 09 PHP
PHP简单系统数据添加以及数据删除模块源文件下载
Jun 07 PHP
PHP面向对象分析设计的61条军规小结
Jul 17 PHP
php出现内存位置访问无效错误问题解决方法
Aug 16 PHP
PHP中的命名空间相关概念浅析
Jan 22 PHP
php字符串函数学习之substr()
Mar 27 PHP
php程序内部post数据的方法
Mar 31 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
Dec 14 PHP
用PHP的socket实现客户端到服务端的通信实例详解
Feb 04 PHP
php实现的统计字数函数定义与使用示例
Jul 26 PHP
Laravel5.* 打印出执行的sql语句的方法
Jul 24 PHP
lnmp安装多版本PHP共存的方法详解
Aug 02 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上传文件常见问题总结
2015/02/03 PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
2015/03/02 PHP
PHP经典设计模式之依赖注入定义与用法详解
2019/05/21 PHP
js数据验证集合、js email验证、js url验证、js长度验证、js数字验证等简单封装
2010/05/15 Javascript
JS实现简单的Canvas画图实例
2013/07/04 Javascript
js脚本实现数据去重
2014/11/27 Javascript
JS禁用页面上所有控件的实现方法(附demo源码下载)
2015/12/17 Javascript
Node.js 应用跑得更快 10 个技巧
2016/04/03 Javascript
由浅入深剖析Angular表单验证
2016/07/14 Javascript
js遍历map javaScript遍历map的简单实现
2016/08/26 Javascript
JavaScript事件用法浅析
2016/10/31 Javascript
微信小程序开发之相册选择和拍照详解及实例代码
2017/02/22 Javascript
jQuery实现扑克正反面翻牌效果
2017/03/10 Javascript
微信小程序-getUserInfo回调的实例详解
2017/10/27 Javascript
微信小程序实现验证码获取倒计时效果
2018/02/08 Javascript
Javascript实现运算符重载详解
2018/04/07 Javascript
JS构造一个html文本内容成文件流形式发送到后台
2018/07/31 Javascript
elementUI select组件value值注意事项详解
2019/05/29 Javascript
JavaScript中判断为整数的多种方式及保留两位小数的方法
2019/09/09 Javascript
layer ui插件显示tips时,修改字体颜色的实现方法
2019/09/11 Javascript
vue基本使用--refs获取组件或元素的实例
2019/11/07 Javascript
vue实现在线预览pdf文件和下载(pdf.js)
2019/11/26 Javascript
python图像常规操作
2017/11/11 Python
Python XML转Json之XML2Dict的使用方法
2019/01/15 Python
跨域修改iframe页面内容详解
2019/10/31 HTML / CSS
澳大利亚买卖正宗二手奢侈品交易平台:Luxe.It.Fwd
2019/10/16 全球购物
库存图片、照片、矢量图、视频和音乐:Shutterstock
2021/02/12 全球购物
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
2013/04/07 面试题
教育科研先进个人材料
2014/01/26 职场文书
经典公益广告词
2014/03/13 职场文书
乡镇党员干部四风对照检查材料思想汇报
2014/09/27 职场文书
2015年少先队活动总结
2015/03/25 职场文书
假期读书倡议书3篇
2019/08/19 职场文书
Python实现视频中添加音频工具详解
2021/12/06 Python
关于Python中进度条的六个实用技巧分享
2022/04/05 Python
Go语言入门exec的基本使用
2022/05/20 Golang