关于PHP数组的一些排序。

<?php
// 冒泡排序法
   //$arr = array(0,5,-1,3,4,5,32,22,-3,-4,-7);

   //var_dump($arr);
   function arr_sort($arr){
      for ($a = 1; $a <= count($arr) ; $a++) {
         for ($i=0; $i < count($arr)-$a ; $i++) {
            if ($arr[$i] > $arr[$i+1]) {
               $temp = $arr[$i];
               $arr[$i] = $arr[$i+1];
               $arr[$i+1] = $temp;
            }
         }
      }
      return $arr;
   }
   //var_dump(arr_sort($arr));

   //选择排序法 原理: 先认为第一个位置的是最值,然后将自己放入一个临时值(minVal),然后去和无序区比较,如果发现minval
   //不是最值,那就将新的最值和自己对换,完毕后,将最值放入原本的位置;
   //这样,前面的值都是有序的了
   function selectSort($arr){
      $temp = 0;
      for ($i=0; $i <count($arr)-1 ; $i++) { //最后一次不必要比较,因为前面都已经有序了
         //记录有序区的最新那个值 和下标 用于新的最值进行插入
         $minVal = $arr[$i];
         $minIndex = $i;
         for ($j=$i+1; $j <count($arr) ; $j++) { //$i+1:墙面都有序了,无需比较,所以要被排查的数组变短了
            if ($minVal < $arr[$j]) {//在无序区取出最值
               $minVal = $arr[$j];
               $minIndex = $j;//记录下标是因为:该下标会一直被刷新,直到最值,然后用于和有序区最后的那个值对换
               //保证正真的对换只发生一次就好
            }
         }
         if ($i != $minIndex) {//最值小标不一样才对换
            $temp = $arr[$i];
            $arr[$i] = $arr[$minIndex];
            $arr[$minIndex] = $temp;
         }
      }
      return $arr;
   }
   // var_dump(selectSort($arr));

   //插入排序 原理:开始从数组的第二位开始,和前面比较前 先将比较的值记录在temp临时变量里面
   //发现 比自己小的值就将小的值复制然后 放在自己当时的位置下标处,这样就会有两个一样的值了;将要比较的新值 继续往前寻找(由key决定)
   //发现不满足条件的,就取当前位置的下标,将自己插入 整个过程只有插入,没有替换
   function insertSort($arr){
      for ($i=1; $i < count($arr) ; $i++) {
         $temp = $arr[$i];
         $key = $i-1;
         while ($key>=0 && $temp<$arr[$key]) {
            $arr[$key+1] = $arr[$key];
            $key--;//注意key移动到了一个未知的值,如果下次比较不会进入这个循环,绝对会导致temp对换的目标错误
         }//直到temp找到合适的位置那就退出循环,或者到顶了
         if (($key+1)!=$i) {//和temp比较的数不是本身的前一位,如果是前一位,那就不用插入,自己待在自己的位置
            $arr[$key+1] = $temp;
         }
      }
      return $arr;
   }

   //快速排序法  特点,第一遍历,K的值不变 具体原理:只想说不简单 百度去
   function quickSort($array)
   {
       if(!isset($array[1]))
           return $array;
       $mid = $array[0]; //获取一个用于分割的关键字,一般是首个元素
       $leftArray = array();
       $rightArray = array();

       foreach($array as $v)
       {
           if($v > $mid)
               $rightArray[] = $v;  //把比$mid大的数放到一个数组里
           if($v < $mid)
               $leftArray[] = $v;   //把比$mid小的数放到另一个数组里
       }

       $leftArray = quickSort($leftArray); //把比较小的数组再一次进行分割
       $leftArray[] = $mid;        //把分割的元素加到小的数组后面,不能忘了它哦

       $rightArray = quickSort($rightArray);  //把比较大的数组再一次进行分割
       return array_merge($leftArray,$rightArray);  //组合两个结果
   }
   //来个20W的数据测试
   $arr = array();
   for ($i=0; $i <200000 ; $i++) { //上200W数据就爆内存了
      $arr[] = mt_rand(0,9999);
   }
   echo '执行前'.date('Y-m-d h:i:s').'<br>';
   quickSort($arr);
   echo '执行后'.date('Y-m-d h:i:s');



 ?>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>四种数组排序法</title>
	</head>
	<body>
	</body>
</html>
原文地址:https://www.cnblogs.com/lgqtecng/p/6415567.html