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版本号
Oct 09 PHP
用PHP和ACCESS写聊天室(九)
Oct 09 PHP
php时间不正确的解决方法
Apr 09 PHP
PHP获取网址的顶级域名函数代码
Sep 24 PHP
php cli 小技巧
Jun 03 PHP
Codeigniter中禁止A Database Error Occurred错误提示的方法
Jun 12 PHP
PHP管理依赖(dependency)关系工具 Composer 安装与使用
Aug 18 PHP
php禁止直接从浏览器输入地址访问.php文件的方法
Nov 04 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
Apr 20 PHP
详解php中空字符串和0之间的关系
Oct 23 PHP
关于PhpStorm设置点击编辑文件自动定位源文件的实现方式
Dec 30 PHP
php字符串倒叙
Apr 01 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
TP5框架安全机制实例分析
2020/04/05 PHP
DEFER怎么用?
2006/07/01 Javascript
doctype后如何获得body.clientHeight的方法
2007/07/11 Javascript
JavaScript事件处理器中的event参数使用介绍
2013/05/24 Javascript
jquery ready(fn)事件使用介绍
2013/08/21 Javascript
jquery判断浏览器后退时候弹出消息的方法
2014/08/11 Javascript
jQuery中:header选择器用法实例
2014/12/29 Javascript
JS实现页面超时后自动跳转到登陆页面
2015/01/19 Javascript
每天一篇javascript学习小结(Boolean对象)
2015/11/12 Javascript
又一款js时钟!transform实现时钟效果
2016/08/15 Javascript
AngularJs  unit-testing(单元测试)详解
2016/09/02 Javascript
JS 实现计算器详解及实例代码(一)
2017/01/08 Javascript
nginx配置React静态页面的方法教程
2017/11/03 Javascript
小程序实现列表多个批量倒计时
2021/01/29 Javascript
浅入深出Vue之组件使用
2019/07/11 Javascript
对layer弹出框中icon数字参数的说明介绍
2019/09/04 Javascript
javascript使用正则表达式实现注册登入校验
2020/09/23 Javascript
[52:57]2014 DOTA2国际邀请赛中国区预选赛 LGD-CDEC VS HGT
2014/05/21 DOTA
[05:35]DOTA2英雄梦之声_第13期_拉比克
2014/06/21 DOTA
Python格式化压缩后的JS文件的方法
2015/03/05 Python
python中os和sys模块的区别与常用方法总结
2017/11/14 Python
python+opencv实现动态物体识别
2018/01/09 Python
Python读取指定日期邮件的实例
2019/02/01 Python
Python数据模型与Python对象模型的相关总结
2021/01/26 Python
美国奢侈品在线团购网站:Gilt City
2017/11/16 全球购物
PAUL HEWITT手表美国站:德国北部时尚生活配饰品牌,船锚元素
2017/11/18 全球购物
关于环保的演讲稿
2014/05/10 职场文书
关于安全的标语
2014/06/10 职场文书
乡镇党员干部群众路线对照检查材料思想汇报
2014/09/28 职场文书
酒店辞职信怎么写
2015/02/27 职场文书
交通肇事罪辩护词
2015/05/21 职场文书
房产电话营销开场白
2015/05/29 职场文书
回复函范文
2015/07/14 职场文书
什么是创业计划书?什么是商业计划书?这里一一解答
2019/07/12 职场文书
详解JVM系列之内存模型
2021/06/10 Javascript
Windows10安装Apache2.4的方法步骤
2022/06/25 Servers