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 相关文章推荐
一个从别的网站抓取信息的例子(域名查询)
Oct 09 PHP
php简单静态页生成过程
Mar 27 PHP
php xml实例 留言本
Mar 20 PHP
php下将XML转换为数组
Jan 01 PHP
php实例分享之二维数组排序
May 15 PHP
php实现插入数组但不影响原有顺序的方法
Mar 27 PHP
使用WordPress发送电子邮件的相关PHP函数用法解析
Dec 15 PHP
php实现scws中文分词搜索的方法
Dec 25 PHP
彻底搞懂PHP 变量结构体
Oct 11 PHP
PHP进阶学习之垃圾回收机制详解
Jun 18 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
Dec 12 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
Feb 15 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
Yii框架防止sql注入,xss攻击与csrf攻击的方法
2016/10/18 PHP
ThinkPHP开发--使用七牛云储存
2017/09/14 PHP
js模仿jquery的写法示例代码
2013/06/16 Javascript
js获取php变量的实现代码
2013/08/10 Javascript
JS控制图片等比例缩放的示例代码
2013/12/24 Javascript
js动态拼接正则表达式的两种方法
2014/03/04 Javascript
jquery动态改变form属性提交表单
2014/06/03 Javascript
使用js获取地址栏参数的方法推荐(超级简单)
2016/06/14 Javascript
基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一)
2016/06/22 Javascript
jquery 实现复选框的全选操作实例代码
2017/01/24 Javascript
JS简单实现数组去重的方法示例
2017/03/27 Javascript
关于前后端json数据的发送与接收详解
2017/07/30 Javascript
10个最优秀的Node.js MVC框架
2017/08/24 Javascript
Three.js开发实现3D地图的实践过程总结
2017/11/20 Javascript
微信小程序wx.previewImage预览图片实例详解
2017/12/07 Javascript
ios设备中angularjs无法改变页面title的解决方法
2018/09/13 Javascript
原生JS实现pc端轮播图效果
2020/12/21 Javascript
Python专用方法与迭代机制实例分析
2014/09/15 Python
Python中使用PyQt把网页转换成PDF操作代码实例
2015/04/23 Python
python装饰器实例大详解
2017/10/25 Python
Python(Django)项目与Apache的管理交互的方法
2018/05/16 Python
pandas.DataFrame删除/选取含有特定数值的行或列实例
2018/11/07 Python
如何使用pyinstaller打包32位的exe程序
2019/05/26 Python
Python实现基于SVM的分类器的方法
2019/07/19 Python
Python3 tkinter 实现文件读取及保存功能
2019/09/12 Python
python实现KNN分类算法
2019/10/16 Python
TensorFlow tf.nn.conv2d实现卷积的方式
2020/01/03 Python
python logging设置level失败的解决方法
2020/02/19 Python
Django Model中字段(field)的各种选项说明
2020/05/19 Python
Python网络爬虫四大选择器用法原理总结
2020/06/01 Python
python高级特性简介
2020/08/13 Python
Python 实现一个简单的web服务器
2021/01/03 Python
北美个性化礼品商店:Things Remembered
2018/06/12 全球购物
Rossignol金鸡美国官网:始于1907年法国百年雪具品牌
2019/03/06 全球购物
党员进社区活动总结
2015/05/07 职场文书
初中物理教学反思
2016/02/19 职场文书