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数据库连接类~~做成一个分页类!
Nov 25 PHP
建站常用13种PHP开源CMS比较
Aug 23 PHP
简单的移动设备检测PHP脚本代码
Feb 19 PHP
求PHP数组最大值,最小值的代码
Oct 31 PHP
php实现在线生成条形码示例分享(条形码生成器)
Dec 30 PHP
浅谈PHP的数据库接口和技术
Dec 09 PHP
Laravel下生成验证码的类
Nov 15 PHP
PHP基于curl模拟post提交json数据示例
Jun 22 PHP
laravel批量生成假数据的方法
Oct 09 PHP
asp.net和php的区别点总结
Oct 10 PHP
PHP实现本地图片转base64格式并上传
May 29 PHP
PHP变量的作用范围实例讲解
Dec 22 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写的小东西
2006/12/06 PHP
php中防止伪造跨站请求的小招式
2011/09/02 PHP
apache php模块整合操作指南
2012/11/16 PHP
ThinkPHP之foreach标签使用概述
2014/06/30 PHP
PHP使用feof()函数读文件的方法
2014/11/07 PHP
WordPress后台中实现图片上传功能的实例讲解
2016/01/11 PHP
php实现快速对二维数组某一列进行组装的方法小结
2019/12/04 PHP
PHP设计模式入门之迭代器模式原理与实现方法分析
2020/04/26 PHP
editable.js 基于jquery的表格的编辑插件
2011/10/24 Javascript
node.js中的http.response.setHeader方法使用说明
2014/12/14 Javascript
jQuery修改class属性和CSS样式整理
2015/01/30 Javascript
Js+php实现异步拖拽上传文件
2015/06/23 Javascript
JavaScript实现级联菜单的方法
2015/06/29 Javascript
vuejs2.0实现分页组件使用$emit进行事件监听数据传递的方法
2017/02/22 Javascript
vue.js实例todoList项目
2017/07/07 Javascript
bootstrap 通过加减按钮实现输入框组功能
2017/11/15 Javascript
[32:26]EG vs IG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python 获取et和excel的版本号
2009/04/09 Python
Python设计模式之命令模式简单示例
2018/01/10 Python
python 获取图片分辨率的方法
2019/01/08 Python
Python实现对特定列表进行从小到大排序操作示例
2019/02/11 Python
Django对models里的objects的使用详解
2019/08/17 Python
python sitk.show()与imageJ结合使用常见的问题
2020/04/20 Python
Python标准库:内置函数max(iterable, *[, key, default])说明
2020/04/25 Python
图解Python中深浅copy(通俗易懂)
2020/09/03 Python
python+requests实现接口测试的完整步骤
2020/10/27 Python
纯DOM+CSS3实现简单的小风车动画
2016/09/27 HTML / CSS
moosejaw旗下的户外商品促销网站:Mountain Steals
2017/02/27 全球购物
美国亚马逊旗下男装网站:East Dane(支持中文)
2019/09/25 全球购物
下面关于"联合"的题目的输出是什么
2013/08/06 面试题
国际贸易求职信
2014/07/05 职场文书
庆六一活动总结
2014/08/29 职场文书
2014年市场部工作总结
2014/11/25 职场文书
升职自我推荐信范文
2015/03/25 职场文书
Python基础之赋值,浅拷贝,深拷贝的区别
2021/04/30 Python
Vscode中SSH插件如何远程连接Linux
2022/05/02 Servers