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中使用XML
Oct 09 PHP
我的论坛源代码(六)
Oct 09 PHP
ASP和PHP都是可以删除自身的
Apr 09 PHP
php中全局变量global的使用演示代码
May 18 PHP
php图片上传存储源码并且可以预览
Aug 26 PHP
编写Smarty插件在模板中直接加载数据的详细介绍
Jun 26 PHP
对于PHP 5.4 你必须要知道的
Aug 07 PHP
使用PHP下载CSS文件中的图片的代码
Sep 24 PHP
yii数据库的查询方法
Dec 28 PHP
前端必学之PHP语法基础
Jan 01 PHP
PHP文字转图片功能原理与实现方法分析
Aug 31 PHP
基于laravel-admin 后台 列表标签背景的使用方法
Oct 03 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 获取远程文件内容的函数代码
2010/03/24 PHP
PHP动态分页函数,PHP开发分页必备啦
2011/11/07 PHP
Linux下安装oracle客户端并配置php5.3
2014/10/12 PHP
php判断两个日期之间相差多少个月份的方法
2015/06/18 PHP
Zend Framework实现将session存储在memcache中的方法
2016/03/22 PHP
AlertBox 弹出层信息提示框效果实现步骤
2010/10/11 Javascript
运算符&amp;&amp;的三个不同层次
2013/04/07 Javascript
JavaScript SetInterval与setTimeout使用方法详解
2013/11/15 Javascript
简单实用的反馈表单无刷新提交带验证
2013/11/15 Javascript
利用javascript判断文件是否存在
2013/12/31 Javascript
JavaScript异步加载浅析
2014/12/28 Javascript
Javascript之Number对象介绍
2016/06/07 Javascript
了解VUE的render函数的使用
2017/06/08 Javascript
浅谈Angular路由守卫
2017/08/26 Javascript
js继承的这6种方式!(上)
2019/04/23 Javascript
微信小程序实现同一页面取值的方法分析
2019/04/30 Javascript
vue 实现购物车总价计算
2019/11/06 Javascript
微信小程序实现音乐播放器
2019/11/20 Javascript
[52:12]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
Python实现带参数的用户验证功能装饰器示例
2018/12/14 Python
Appium Python自动化测试之环境搭建的步骤
2019/01/23 Python
python算法与数据结构之单链表的实现代码
2019/06/27 Python
Python的bit_length函数来二进制的位数方法
2019/08/27 Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
2020/02/21 Python
python中rb含义理解
2020/06/18 Python
浅谈Python 钉钉报警必备知识系统讲解
2020/08/17 Python
美国唇部护理专家:Sara Happ
2019/06/19 全球购物
初一地理教学反思
2014/01/16 职场文书
党员自我批评与反省材料
2014/02/10 职场文书
管理岗位竞聘演讲稿
2014/08/18 职场文书
我们的节日元宵活动方案
2014/08/23 职场文书
人事任命通知书
2015/04/21 职场文书
推广普通话的宣传语
2015/07/13 职场文书
职业生涯规划书之大学四年
2019/08/07 职场文书
5行Python代码实现一键批量扣图
2021/06/29 Python
Python必备技巧之字符数据操作详解
2022/03/23 Python