PHP简单选择排序算法实例


Posted in PHP onJanuary 26, 2015

简单的选择排序算法:通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1<=i<=n)个记录交换

<?php

    class Sort{ 

        /**

         * 简单的选择排序

         * 

         * @param unknown_type $arr

         */

        public function selectSort(&$arr) { 

            $len=count($arr);

            for ($i=0;$i<$len;$i++) {

                $min=$i;

                for ($j=$i+1;$j<=$len-1;$j++) {

                    if ($arr[$min]>$arr[$j]) {//如果找到比$arr[$min]较小的值,则将该下标赋给$min

                        $min=$j;

                    }

                }

                if ($min!=$i){//若$min不等于$i,说明找到了最小值,则交换

                    $this->swap($arr[$i],$arr[$min]);

                }

            }

        }

        /**

         * 将$a和$b两个值进行位置交换

         */

        public function swap(&$a,&$b) {

            $temp=$a;

            $a=$b;

            $b=$temp;

        }

    }

    $arr=array(4,6,1,2,9,8,7,3,5);

    $test=new Sort(); 

    $test->selectSort($arr);//简单的选择排序

//    var_dump($arr);

?>

简单选择排序的特点:交换移动数据次数相当少,从而节约了相应的时间
简单选择排序的时间复杂度分析:
无论最好最差的情况,其比较次数都是一样多,第i趟排序需要进行n-i次关键字的比较,此时需要比较n(n-1)/2次。所以最终的时间复杂度是O(n^2)
尽管与冒泡排序同为O(n^2),但选择排序的性能还是略优于冒泡排序的。

PHP 相关文章推荐
不用iconv库的gb2312与utf-8的互换函数
Oct 09 PHP
phpMyAdmin下载、安装和使用入门教程
May 31 PHP
php trim 去除空字符的定义与语法介绍
May 31 PHP
使用cookie实现统计访问者登陆次数
Jun 08 PHP
php生成图形(Libchart)实例
Nov 06 PHP
php 伪静态之IIS篇
Jun 02 PHP
微信公众号点击菜单即可打开并登录微站的实现方法
Nov 14 PHP
几个实用的PHP内置函数使用指南
Nov 27 PHP
PHP+APACHE实现网址伪静态
Feb 22 PHP
php链表用法实例分析
Jul 09 PHP
kindeditor 加入七牛云上传的实例讲解
Nov 12 PHP
PHP中OpenSSL加密问题整理
Dec 14 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
Jan 26 #PHP
php使用cookie显示用户上次访问网站日期的方法
Jan 26 #PHP
php批量删除cookie的简单实现方法
Jan 26 #PHP
php创建、获取cookie及基础要点分析
Jan 26 #PHP
php表单提交与$_POST实例分析
Jan 26 #PHP
Symfony数据校验方法实例分析
Jan 26 #PHP
symfony表单与页面实现技巧
Jan 26 #PHP
You might like
PHP 函数call_user_func和call_user_func_array用法详解
2014/03/02 PHP
php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
2017/01/17 PHP
PDO::inTransaction讲解
2019/01/28 PHP
jQuery登陆判断简单实现代码
2013/04/21 Javascript
JS判断数组中是否有重复值得三种实用方法
2013/08/16 Javascript
js防止表单重复提交的两种方法
2013/09/30 Javascript
鼠标滚轴控制文本框值的JS代码
2013/11/19 Javascript
手机平板等移动端适配跳转URL的js代码
2014/01/25 Javascript
js运动应用实例解析
2015/12/28 Javascript
jQuery中inArray方法注意事项分析
2016/01/25 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
2016/03/25 Javascript
JS/jQ实现免费获取手机验证码倒计时效果
2016/06/13 Javascript
Angular.JS去掉访问路径URL中的#号详解
2017/03/30 Javascript
利用JavaScript的%做隔行换色的实例
2017/11/25 Javascript
vue项目刷新当前页面的三种方法
2018/12/04 Javascript
[02:41]《西雅图我们来了》2015国际邀请赛出征全记录
2015/07/23 DOTA
[01:11:15]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[58:00]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第二场 2月7日
2021/03/11 DOTA
Python实现的拟合二元一次函数功能示例【基于scipy模块】
2018/05/15 Python
Flask框架Flask-Principal基本用法实例分析
2018/07/23 Python
python读取图片并修改格式与大小的方法
2018/07/24 Python
python 监听salt job状态,并任务数据推送到redis中的方法
2019/01/14 Python
使用python代码进行身份证号校验的实现示例
2019/11/21 Python
python 轮询执行某函数的2种方式
2020/05/03 Python
Python实现寻找回文数字过程解析
2020/06/09 Python
Python配置pip国内镜像源的实现
2020/08/20 Python
一个入门级python爬虫教程详解
2021/01/27 Python
男女钓鱼靴和甲板鞋:XTRATUF
2021/01/09 全球购物
类和结构的区别
2012/08/15 面试题
物流管理专业大学生自荐信
2013/10/04 职场文书
汽车专业学生自我评价
2014/01/19 职场文书
募捐倡议书怎么写
2014/05/14 职场文书
安全生产宣传标语
2014/06/06 职场文书
公司活动总结怎么写
2014/06/25 职场文书
领导班子四风表现材料
2014/08/23 职场文书
2016年春季趣味运动会开幕词
2016/03/04 职场文书