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 相关文章推荐
实用函数9
Nov 08 PHP
删除数组元素实用的PHP数组函数
Aug 18 PHP
网友原创的PHP模板类代码
Sep 07 PHP
php下过滤html代码的函数 提高程序安全性
Mar 02 PHP
PHP return语句另类用法不止是在函数中
Sep 17 PHP
PHP实现扎金花游戏之大小比赛的方法
Mar 10 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
Mar 21 PHP
php 一维数组的循环遍历实现代码
Apr 10 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
Aug 31 PHP
总结PHP内存释放以及垃圾回收
Mar 29 PHP
CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析
Feb 28 PHP
基于ThinkPHP删除目录及目录文件函数
Oct 28 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
Zend Framework常用校验器详解
2016/12/09 PHP
javascript 清空form表单中某种元素的值
2009/12/26 Javascript
完美解决AJAX跨域问题
2013/11/01 Javascript
使用js解决由border属性引起的div宽度问题
2013/11/26 Javascript
Vue.js双向绑定操作技巧(初级入门)
2016/12/27 Javascript
vue2滚动条加载更多数据实现代码
2017/01/10 Javascript
微信小程序学习(4)-系统配置app.json详解
2017/01/12 Javascript
jquery实现tab键进行选择后enter键触发click行为
2017/03/29 jQuery
weui框架实现上传、预览和删除图片功能代码
2017/08/24 Javascript
判断div滑动到底部的scroll实例代码
2017/11/15 Javascript
vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
2017/11/27 Javascript
用ES6的class模仿Vue写一个双向绑定的示例代码
2018/04/20 Javascript
JS常用排序方法实例代码解析
2020/03/03 Javascript
js实现自定义右键菜单
2020/05/18 Javascript
通过angular CDK实现页面元素拖放的步骤详解
2020/07/01 Javascript
vue addRoutes路由动态加载操作
2020/08/04 Javascript
[01:00:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第三场 1月10日
2021/03/11 DOTA
Python OpenCV获取视频的方法
2018/02/28 Python
pandas数据框,统计某列数据对应的个数方法
2018/04/11 Python
Python中那些 Pythonic的写法详解
2019/07/02 Python
Python的bit_length函数来二进制的位数方法
2019/08/27 Python
python多线程分块读取文件
2019/08/29 Python
Python实现使用dir获取类的方法列表
2019/12/24 Python
Python包和模块的分发详细介绍
2020/06/19 Python
python中关于数据类型的学习笔记
2020/07/19 Python
python实现学生管理系统开发
2020/07/24 Python
pycharm专业版远程登录服务器的详细教程
2020/09/15 Python
移动端HTML5开发神器之vconsole详解
2020/12/15 HTML / CSS
Nip + Fab官网:英国美容品牌
2019/08/26 全球购物
西班牙高科技产品购物网站:MejorDeseo
2019/09/08 全球购物
公司企业表扬信
2014/01/11 职场文书
幼儿园门卫岗位职责
2014/02/14 职场文书
2015年保送生自荐信
2015/03/24 职场文书
党校培训学习心得体会
2016/01/06 职场文书
react中的DOM操作实现
2021/06/30 Javascript
Python面试不修改数组找出重复的数字
2022/05/20 Python