huangxuegang

你要悄悄学php,然后惊艳所有人
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

排序算法

Posted on 2019-05-05 11:54  一花多叶无菩提  阅读(200)  评论(0)    收藏  举报

排序:

常用的排序总结

 

 

1、交换排序之冒泡排序(比较相邻的元素。如果第一个比第二个大,就交换他们两个。第一次循环要比较的轮数,第二次循环要比较的次数)。

<?php
//实现冒泡排序     
$arr=[7,6,1,3,5,9,2];
$count=count($arr);
for($i=0;$i<$count;$i++){
    for ($j=0; $j<$count-1-$i;$j++) { 
        if($arr[$j]>$arr[$j+1]){
            $tmp=$arr[$j];
            $arr[$j]=$arr[$j+1];
            $arr[$j+1]=$tmp;
        }
    }
}
$res=implode(',', $arr);
print_r($res);
//1,2,3,5,6,7,9
 ?>

 2、交换排序之快速排序(给定一个中间数把小于他的放在左边,把大于它的放在右边)

<?php 
/**
快速排序
给定一个中间数把小于他的放在左边,把大于它的放在右边
**/
$arr=[4,1,3,2,6,7,8,9,5];
function quickSort($arr){
    if(!is_array($arr))return false;
    if(count($arr)<=1) return $arr;
    $left=$right=array();
    for($i=1;$i<count($arr);$i++){
        if($arr[$i]<$arr[0]){
            $left[]=$arr[$i];
        }else{
            $right[]=$arr[$i];
        }
    }
    $left=quickSort($left);
    $right=quickSort($right);
    return array_merge($left,array($arr[0]),$right);
}
$res=quickSort($arr);
$res1=implode(',', $res);
var_dump($res1);
//1,2,3,4,5,6,7,8,9
 ?>

3、选择排序之直接选择排序(传入一个无序的数组进行选择排序每次找到最小的数下一次从这个数的下一位进行寻找)

<?php
function order($arr){
       $count = count($arr);
       for($i=0;$i<$count-1;$i++){
           $min = $i;
          for($j= $i+1;$j<$count;$j++){
             if($arr[$j]<$arr[$min]){
                 $min=$j;
             }
         }
         if($i!= $min){
               $temp = $arr[$i];
               $arr[$i] = $arr[$min];
               $arr[$min] = $temp;
        }
     }
      return $arr;
    }
$arr=array(6,3,8,6,4,2,9,5,1);
$res = order($arr);
var_dump($res );
?>

4、插入排序之直接插入排序(每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序)

<?php
//直接插入排序
function swap(array &$arr,$a,$b){
  $temp = $arr[$a];
  $arr[$a] = $arr[$b];
  $arr[$b] = $temp;
}
function InsertSort(array &$arr){
  $count = count($arr);
  //数组中第一个元素作为一个已经存在的有序表
  for($i = 1;$i < $count;$i ++){
    $temp = $arr[$i];   //设置哨兵
    for($j = $i - 1;$j >= 0 && $arr[$j] > $temp;$j --){
      $arr[$j + 1] = $arr[$j];    //记录后移
    }
    $arr[$j + 1] = $temp;   //插入到正确的位置
  }
}
$arr = array(9,1,5,8,3,7,4,6,2);
InsertSort($arr);
var_dump($arr);