博客列表 >PHP数组四种排序算法总结

PHP数组四种排序算法总结

潜轲的博客
潜轲的博客原创
2017年08月17日 10:15:38890浏览

四种排序算法

1.冒泡算法

//原理:将数组中的值从第一个开始一一比较,每次比较确定一个最大值,放在比较范围内的最后,比较范围逐渐缩小。

function bubble(&$arr)

{

     $len = count($arr);

     //设置标识,用来判断数组本身是不是有序

     $flag = 0;

     //外层循环,每循环一次确定一个相对最大值,放在最后,到最后一个不用比较,所以循环次数为$len-1

     for($i=0;$i<$len-1;$i++)

     {

         //内层循环,从头开始比较,比到上一次排的最大值,就不比了,所以比较次数为$len-$i-1

             for($j=0;$j<$len-$i-1;$j++)

             {

                     if($arr[$j]>$arr[$j+1])

                     {

                     $temp = $arr[$j];

                     $arr[$j] = $arr[$j+1];

                     $arr[$j+1] = $temp;

                    //如果发生比较则无序,将标识置为1

                     $flag = 1;

                     }

             }

             //可以做一下优化

             if($flag == 0)

             {

             break;

             }

             else

             {

             //用于下一次判断

             $flag = 1;

             }

     }

}


2.插入排序

/*

*原理:将第一个数,和后面的数,作为两个数组,将后面的数逐步插入前面的数组,通过设置一个指针进行比较,如果大

*于,则放在指针后,小于,将指针的值向后移。

*/

function insert(&$arr)

{

    $len = count($arr);

    //从第二个开始插入

    for($i=1;$i<$len;$i++)

    {

        //插入的值

        $insertVal = $arr[$i];

        //设置插入的值开始比较的位置,即初始化指针

        $index = $i-1;

        while($index>=0&&($insertVal<$arr[$index]))

        {

            //将指针所在位置数向后移一位

            $arr[$index+1] = $arr[$index];

            $index--;

        }

        //如果条件不符(即比指针所指大),即插入值比指针所指位置值大,将值插入指针所在位置之后

        $arr[$index+1] = $insertVal;

    }

}


3.选择排序

//默认设定第一个为最小值,然后从数组中比较选出一个最小值,放在设定的位置

function select(&$arr)

{

         $len = count($arr)

         //循环,最后一位不用比较,一定是最大值

         for($i=0;$i<$len-1;$i++)

         {

                 //设置最小值和下标

                 $min = $arr[$i];

                 $min_in  = $i;

                 //从$i下一位开始比较,找到最小值,从$i位一直比较到最后

                 for($j=$i+1;$j<$len;$j++)

                 {

                         //判断如果小,则交换

                         if($arr[$j]<$min)

                         {

                         $min = $arr[$j];

                         $min_in = $j; 

                         }

                         //判断如果$i和最小值不是一个交换

                         if($min_in!=$i)

                         {

                         $arr[$min_in] = $arr[$i];

                         $arr[$i] = $min;

                         }

                 }

         }

}


4.快速排序

//即设置一个标准,将数组以标准分为两组,以此类推,快速排序是四种排序中最快的,因为有n个快速排序在同时进行

function quick($arr)

{

         $len = count($arr);

         //如果只有一个数,返回数组

         if($len<=1)

         {

         return $arr;

         }

         //设定标准及左右两个数组

         $base = $arr[0]

         $left = $right =[];

        

         for($i = 1;$i<$len;$i++)

         {

                     if($arr[$i]<$base)

                     {

                     $left[] = $arr[$i];

                     }

                     else

                     {

                     $right[] = $arr[$i];

                     }

        }

         //递归调用函数

         $left = quick($left);

         $right = quick($right);

         //返回值

         return array_merage($left,array($base),$right);

}

//总结:四种排序算法各有优点,不过最快的是快速排序,无可争议。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议