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 相关文章推荐
测试您的 PHP 水平的题目
May 30 PHP
php下网站防IP攻击代码,超级实用
Oct 24 PHP
php做下载文件的实现代码及文件名中乱码解决方法
Feb 03 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
Apr 15 PHP
浅谈php和.net的区别
Sep 28 PHP
windows中为php安装mongodb与memcache
Jan 06 PHP
php中$_POST与php://input的区别实例分析
Jan 07 PHP
Symfony2实现在doctrine中内置数据的方法
Feb 05 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
Jul 20 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
Apr 03 PHP
YII框架模块化处理操作示例
Apr 26 PHP
基于PHP的登录和注册的功能的实现
Aug 06 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
ThinkPHP实现一键清除缓存方法
2014/06/26 PHP
PHP中mysqli_affected_rows作用行数返回值分析
2014/12/26 PHP
PHP实现分布式memcache设置web集群session同步的方法
2018/04/10 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
Laravel5.1 框架Middleware中间件基本用法实例分析
2020/01/04 PHP
PHP 实现 JSON 数据的编码和解码操作详解
2020/04/22 PHP
JQuery 动画卷页 返回顶部 动画特效(兼容Chrome)
2010/02/15 Javascript
js 控制下拉菜单刷新的方法
2013/03/03 Javascript
对之前写的jquery分页做下升级
2014/06/19 Javascript
JavaScript数据结构与算法之栈详解
2015/03/12 Javascript
快速掌握Node.js事件驱动模型
2016/03/21 Javascript
node.js连接mongoDB数据库 快速搭建自己的web服务
2016/04/17 Javascript
详解Bootstrap各式各样的按钮(推荐)
2016/12/13 Javascript
jQuery实现两个select控件的互移操作
2016/12/22 Javascript
在 Angular2 中实现自定义校验指令(确认密码)的方法
2017/01/23 Javascript
JS动态生成年份和月份实例代码
2017/02/04 Javascript
微信小程序自定义模态对话框实例详解
2017/08/16 Javascript
ES6学习教程之模板字符串详解
2017/10/09 Javascript
JavaScript 隐性类型转换步骤浅析
2018/03/15 Javascript
详解JavaScript栈内存与堆内存
2019/04/04 Javascript
浅谈JavaScript闭包
2019/04/09 Javascript
微信JS-SDK实现微信会员卡功能(给用户微信卡包里发送会员卡)
2019/07/25 Javascript
python模拟登录并且保持cookie的方法详解
2017/04/04 Python
django使用xlwt导出excel文件实例代码
2018/02/06 Python
Empty test suite.(PyCharm程序运行错误的解决方法)
2018/11/30 Python
selenium+python自动化测试之环境搭建
2019/01/23 Python
收藏!10个免费高清视频素材网站!【设计、视频剪辑必备】
2021/03/18 杂记
澳大利亚便宜的家庭购物网站:CrazySales
2018/02/06 全球购物
高中毕业自我鉴定
2013/12/16 职场文书
婚礼证婚人证婚词
2014/01/08 职场文书
安全标准化实施方案
2014/02/20 职场文书
医学生求职自荐书
2014/06/12 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
2015年保卫科工作总结
2015/05/14 职场文书
仰望星空观后感
2015/06/10 职场文书
在校证明模板
2015/06/17 职场文书