• php基础排序算法 冒泡排序 选择排序 插入排序 归并排序 快速排序


    <?php
    $arr=array(12,25,56,1,75,13,58,99,22);
    //冒泡排序
    function sortnum($arr)
    {
        $num=count($arr);
        for($i=0;$i<$num;$i++)
          for($j=0;$j<$num-$i-1;$j++)
          {
            if($arr[$j]<$arr[$j+1])
            {
                $temp=$arr[$j];
                $arr[$j]=$arr[$j+1];
                $arr[$j+1]=$temp;
            }
          }
          return $arr;
        
    }

    //选择排序
    function sortnum1($arr)
    {
        $num=count($arr);
        for($i=0;$i<$num;$i++)
        {
            for($j=$i+1;$j<$num;$j++)
            {
                if($arr[$i]>$arr[$j])
                {
                    $temp=$arr[$i];
                    $arr[$i]=$arr[$j];
                    $arr[$j]=$temp;
                }
            }
        }
        return $arr;
    }
     
     //快速排序
     function sortnum2($arr)
     {
        $num=count($arr);
         if($num<=1)
        {
            return $arr;
        }
        $larr=array();
        $rarr=array();
        $mid=$arr[0];
            for($i=1;$i<$num;$i++)
            {
               if($arr[$i]<$mid)
               {
                $larr[]=$arr[$i];
               }
               else
               {
                $rarr[]=$arr[$i];
                    
               }
            }
         $larr=sortnum2($larr);
         $rarr=sortnum2($rarr);   
         return array_merge($larr,array($mid),$rarr);
     }
     
    //插入排序
    function sortnum3($arr)
    {
        $num=count($arr);
        for($i=1;$i<$num;$i++)
        {
           $tem=$arr[$i];
           for($j=$i-1;$j>=0;$j--)
           {
                if($tem<$arr[$j])
                {
                    $arr[$j+1]=$arr[$j];
                    $arr[$j]=$tem;
                }
                else
                {
                    break;
                }
           }
            
        }
        return $arr;
    }
    //归并排序
    //merge函数将指定的两个有序数组(arr1arr2,)合并并且排序
    //我们可以找到第三个数组,然后依次从两个数组的开始取数据哪个数据小就先取哪个的,然后删除掉刚刚取过///的数据
    function al_merge($arrA,$arrB)
    {
        $arrC = array();
        while(count($arrA) && count($arrB)){
            //这里不断的判断哪个值小,就将小的值给到arrC,但是到最后肯定要剩下几个值,
            //不是剩下arrA里面的就是剩下arrB里面的而且这几个有序的值,肯定比arrC里面所有的值都大所以使用
            $arrC[] = $arrA['0'] < $arrB['0'] ? array_shift($arrA) : array_shift($arrB);
        }
        return array_merge($arrC, $arrA, $arrB);
    }
    //归并排序主程序
    function al_merge_sort($arr){
        $len=count($arr);
        if($len <= 1)
            return $arr;//递归结束条件,到达这步的时候,数组就只剩下一个元素了,也就是分离了数组
        $mid = intval($len/2);//取数组中间
        $left_arr = array_slice($arr, 0, $mid);//拆分数组0-mid这部分给左边left_arr
        $right_arr = array_slice($arr, $mid);//拆分数组mid-末尾这部分给右边right_arr
        $left_arr = al_merge_sort($left_arr);//左边拆分完后开始递归合并往上走
        $right_arr = al_merge_sort($right_arr);//右边拆分完毕开始递归往上走
        $arr=al_merge($left_arr, $right_arr);//合并两个数组,继续递归
        return $arr;
    }
    foreach(al_merge_sort($arr) as $val)
    {
        echo $val."<br>";
    }





     
    ?>

  • 相关阅读:
    实战篇之实现 OutLook 中以 EDM 形式发送通知邮件
    ASP.NET MVC5 之路由器
    ASP.NET MVC5 之数据迁移
    说不出的烦
    ASP.NET MVC5 之 Log4Net 的学习和使用
    读取配置文件参数和文件路径
    序列化和反序列化示例
    面向对象之封装
    面向对象4之常用的乱七八糟
    面向对象三之继承和派生
  • 原文地址:https://www.cnblogs.com/yangtzewang/p/5853458.html
Copyright © 2020-2023  润新知