php排序

1.冒泡排序

 function arrSort(array $arr){
     $flage=true;
     for($i=1,$length=count($arr);$i<=$length&&$flage;$i++){ 
         $flage=false;
         for($j=0;$j<$length-$i;$j++){
             $k=$j+1;
             if($arr[$j]<$arr[$k]){
                 $temp=$arr[$k];
                 $arr[$k]=$arr[$j];
                 $arr[$j]=$temp;
                 $flage=true;    
             }
         }
     }
     return $arr;
}

 2.插入排序

 function insert_srot(array $arr){
     $length=count($arr);
     //确定插入的次数
     for($i=0;$i<$length;$i++){
         //将当前待比较元素取出
         $temp=$arr[$i];
         //假设元素是排好序的
         $flage=true;
         //带比较元素和前面的数相比较,>排到后面
         for($j=$i-1;$j>=0;$j--){
             if($temp<$arr[$j]){ 
                 $arr[$j+1]=$arr[$j];
                 //$arr[$j]=$temp;//如果大于则交换位置
                 $flage=false;//假设错误
             }else{//只要发现$a[j]<$temp,就认为$arr[$j]的位置是对的,不在比较,减少循环次数
                 break;
             }
             // echo "$i  : $j  ";
             // print_arr($arr);
         }
         if($flage==false){//如果是无序的,在这里交换位置,只需交换一次,和最后一个比$temp大的
             $arr[$j+1]=$temp;
         }
     }

     return $arr;
 }

3.选择排序

/**
  * 选择排序法,确保每一轮下来$arr[$i]都是最小的
  * @param  array  $arr  待排序数组
  * @return array  $arr  排序好的数组
  */
 function arrSelecteSort(array $arr){
     $length=count($arr);
     $flage=true;
     for ($i=-1; ++$i<$length;) { 
         $minIndex=$i;
         for($j=$i;++$j<$length;) { 
             if($arr[$j]<$arr[$minIndex]){//如果后面的数小于第一个数
                 $minIndex=$j;//$j为最小数的索引
             }
         }
         if($i != $minIndex){//确定$i为最小数索引
             $temp=$arr[$i];
             $arr[$i]=$arr[$minIndex    ];
             $arr[$minIndex]=$temp;        
         }    
     }
     return $arr;
 }

 4.快速排序

/**
 * 快速排序法
 * @param  array $array
 * @return array $arr       
 */
function quick_sort($array) {
     //递归出口。数组长度为1的时候直接返回
     if(count($array) <= 1) return $array;
     //选一个基础值,所有的值与该值比较大小,分成2个数组
     $key = $array[0];
     $left = $right=[];
     for($i = 1; $i < count($array); $i++) {
        if($array[$i] <= $key) {
              $left[] = $array[$i];
        } else {
              $right[] = $array[$i];
        }
     }
     //再将左右2遍数组继续分割
     $left = quick_sort($left);
     $right = quick_sort($right);

      // print_arr(array_merge($left, array($key), $right));
      // 合并数组
     return array_merge($left, array($key), $right);
}
原文地址:https://www.cnblogs.com/jint-php7/p/9106978.html