zoukankan      html  css  js  c++  java
  • 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>";
    }





     
    ?>

  • 相关阅读:
    Attributes in C#
    asp.net C# 时间格式大全
    UVA 10518 How Many Calls?
    UVA 10303 How Many Trees?
    UVA 991 Safe Salutations
    UVA 10862 Connect the Cable Wires
    UVA 10417 Gift Exchanging
    UVA 10229 Modular Fibonacci
    UVA 10079 Pizza Cutting
    UVA 10334 Ray Through Glasses
  • 原文地址:https://www.cnblogs.com/yangtzewang/p/5853458.html
Copyright © 2011-2022 走看看