博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php的4种基础排序算法
阅读量:3781 次
发布时间:2019-05-22

本文共 3944 字,大约阅读时间需要 13 分钟。

需求:分别用 冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中 的值按照从小到大的顺序进行排序。 

$arr(1,43,54,62,21,66,32,78,36,76,39);

1. 冒泡排序法 

 *     思路分析:法如其名,就是像冒泡一样,每次从数组当中 冒一个最大的数出来。 
 *     比如:2,4,1    // 第一次 冒出的泡是4 
 *                2,1,4   // 第二次 冒出的泡是 2 

 *                1,2,4   // 最后就变成这样 

//从小往大排序        $arr=array(1,43,54,62,21,66,32,78,36,76,39);        function getpao($arr)        {            $len=count($arr);            //设置一个空数组 用来接收冒出来的泡            //该层循环控制 需要冒泡的轮数            for($i=1;$i<$len;$i++)            { //该层循环用来控制每轮 冒出一个数 需要比较的次数                for($k=0;$k<$len-$i;$k++)                {                    if($arr[$k] > $arr[$k+1]) //当前数 > 下一个数                    {                        //交换                        $tmp=$arr[$k+1];                        $arr[$k+1]=$arr[$k];                        $arr[$k]=$tmp;                    }                }            }            return $arr;        }                        var_dump(getpao($arr));
2. 选择排序法: 


选择排序法思路: 每次选择一个相应的元素,然后将其放到指定的位置

//实现思路 双重循环完成,外层控制轮数,当前的最小值。内层 控制的比较次数        function select_sort($arr) {            //$i 当前最小值的位置, 需要参与比较的元素            for($i=0, $len=count($arr); $i<$len-1; $i++) {                //先假设最小的值的位置                $p = $i;                //$j 当前都需要和哪些元素比较,$i 后边的。                for($j=$i+1; $j<$len; $j++) {                    //$arr[$p] 是 当前已知的最小值                    if($arr[$p] > $arr[$j]) {           //从大往小排,改成小于号                        //比较,发现更小的,记录下最小值的位置;并且在下次比较时,                        // 应该采用已知的最小值进行比较。                        $p = $j;                    }                }                //已经确定了当前的最小值的位置,保存到$p中。                //如果发现 最小值的位置与当前假设的位置$i不同,则位置互换即可                if($p != $i) {                    $tmp = $arr[$p];                    $arr[$p] = $arr[$i];                    $arr[$i] = $tmp;                }            }            //返回最终结果            return $arr;        }
3.插入排序法 


插入排序法思路:将要排序的元素插入到已经 假定排序号的数组的指定位置。

function insert_sort($arr) {            //区分 哪部分是已经排序好的;哪部分是没有排序的            //找到其中一个需要排序的元素            //这个元素 就是从第二个元素开始,到最后一个元素都是这个需要排序的元素            //利用循环就可以标志出来            //i循环控制 每次需要插入的元素,一旦需要插入的元素控制好了,            //间接已经将数组分成了2部分,下标小于当前的(左边的),是排序好的序列            for($i=1, $len=count($arr); $i<$len; $i++) {                //获得当前需要比较的元素值。                $tmp = $arr[$i];                //内层循环控制 比较 并 插入                for($j=$i-1;$j>=0;$j--) {                    //$arr[$i];//需要插入的元素; $arr[$j];//需要比较的元素                    if($tmp < $arr[$j]) {           //从大往小排,改成大于号                        //发现插入的元素要小,交换位置                        //将后边的元素与前面的元素互换                        $arr[$j+1] = $arr[$j];                        //将前面的数设置为 当前需要交换的数                        $arr[$j] = $tmp;                    } else {                        //如果碰到不需要移动的元素                        //由于是已经排序好是数组,则前面的就不需要再次比较了。                        break;                    }                }            }            //将这个元素 插入到已经排序好的序列内。            //返回            return $arr;        }

4.快速排序法  

function quick_sort($arr) {            //先判断是否需要继续进行            $length = count($arr);            if($length <= 1) {                return $arr;            }            //如果没有返回,说明数组内的元素个数 多余1个,需要排序            //选择一个标尺            //选择第一个元素            $base_num = $arr[0];            //遍历 除了标尺外的所有元素,按照大小关系放入两个数组内            //初始化两个数组            $left_array = array();//小于标尺的            $right_array = array();//大于标尺的            for($i=1; $i<$length; $i++) {                if($base_num > $arr[$i]) {          //从大往小排,改成小于号                    //放入左边数组                    $left_array[] = $arr[$i];                } else {                    //放入右边                    $right_array[] = $arr[$i];                }            }            //再分别对 左边 和 右边的数组进行相同的排序处理方式            //递归调用这个函数,并记录结果            $left_array = quick_sort($left_array);            $right_array = quick_sort($right_array);            //合并左边 标尺 右边            return array_merge($left_array, array($base_num), $right_array);        }

转载地址:http://ozovn.baihongyu.com/

你可能感兴趣的文章
JSON和AJAX
查看>>
web之监听器listener
查看>>
类加载器
查看>>
数据库设计
查看>>
Java虚拟机的内存分配和运行机制(粗谈)
查看>>
web开发之BaseServlet的使用
查看>>
初识Maven
查看>>
Maven分模块构建项目
查看>>
MyBatis初识
查看>>
MyBatis【进阶详解】
查看>>
面试题集锦(七)
查看>>
注解开发——Spring整合dao/service/web
查看>>
架构的演进
查看>>
Elastic-Job的基础使用
查看>>
策略过滤器的灵活性分析
查看>>
POI的使用
查看>>
Anaconda和PyCharm的下载、安装和配置
查看>>
Mockito单元测试简述
查看>>
GUAVA的常用方法汇总
查看>>
装饰器和门面设计模式介绍
查看>>