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处理图片变得简单 基于gb库的图片处理类附实例代码下载
May 17 PHP
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
Dec 05 PHP
php页面跳转代码 输入网址跳转到你定义的页面
Mar 28 PHP
PHP中file_get_contents高?用法实例
Sep 24 PHP
thinkphp特殊标签用法概述
Nov 24 PHP
symfony表单与页面实现技巧
Jan 26 PHP
PHP抓取网页、解析HTML常用的方法总结
Jul 01 PHP
PHP计算加权平均数的方法
Jul 16 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
Apr 02 PHP
php 时间time与日期date之间的使用详解及区别
Nov 07 PHP
redis查看连接数及php模拟并发创建redis连接的方法
Dec 15 PHP
PHP上传文件及图片到七牛的方法
Jul 25 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
抓取YAHOO股票报价的类
2009/05/15 PHP
zf框架的db类select查询器join链表使用示例(zend框架)
2014/03/14 PHP
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
2014/06/23 PHP
配置eAccelerator和XCache扩展来加速PHP程序的执行
2015/12/22 PHP
基于jquery的滚动条滚动固定div(附演示下载)
2012/10/29 Javascript
javascript中attribute和property的区别详解
2014/06/05 Javascript
Javascript中的apply()方法浅析
2015/03/15 Javascript
JavaScript的jQuery库插件的简要开发指南
2015/08/12 Javascript
基于JavaScript实现全屏透明遮罩div层锁屏效果
2016/01/26 Javascript
jQuery中Ajax全局事件引用方式及各个事件(全局/局部)执行顺序
2016/06/02 Javascript
DOM操作和jQuery实现选项移动操作的简单实例
2016/06/07 Javascript
基于JavaScript实现下拉列表左右移动代码
2017/02/07 Javascript
利用n 升级工具升级Node.js版本及在mac环境下的坑
2017/02/15 Javascript
jQuery.form.js的使用详解
2017/06/14 jQuery
JS实现匀速与减速缓慢运动的动画效果封装示例
2018/08/27 Javascript
vue项目设置scrollTop不起作用(总结)
2018/12/21 Javascript
实现高性能javascript的注意事项
2019/05/27 Javascript
微信小程序实现拨打电话功能的示例代码
2020/06/28 Javascript
Vue在H5 项目中使用融云进行实时个人单聊通讯
2020/12/14 Vue.js
React中使用Vditor自定义图片详解
2020/12/25 Javascript
js实现鼠标拖曳效果
2020/12/30 Javascript
[01:24:09]Ti4 冒泡赛第二轮DK vs C9 1
2014/07/14 DOTA
在Python的Django框架中为代码添加注释的方法
2015/07/16 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
2017/11/29 Python
浅谈pyqt5在QMainWindow中布局的问题
2019/06/21 Python
python动态进度条的实现代码
2019/07/03 Python
Python使用itchat 功能分析微信好友性别和位置
2019/08/05 Python
PYTHON EVAL的用法及注意事项解析
2019/09/06 Python
Python编程快速上手——PDF文件操作案例分析
2020/02/28 Python
南非最受欢迎的时尚品牌:MRP
2016/09/18 全球购物
Unix里面如何在后台运行程序
2016/10/14 面试题
大学运动会通讯稿
2014/01/28 职场文书
开学典礼感言
2014/02/16 职场文书
大一学生职业生涯规划
2014/03/11 职场文书
导航工程专业自荐信
2014/09/02 职场文书
Vue通过懒加载提升页面响应速度
2021/05/10 Vue.js