PHP算法之快速排序、冒泡排序

快速排序

<?php
Class Sort
{
    //快速排序
    public function quickly($array)
    {
        //判断排序的数组是否大于1
        if (count($array)<=1) {
            return $array;
        }
        //先找出一个中间值
        $middle = $array[0];
        //用来存储分好类的元素
        $right = array();
        $left = array();

        for ($i=1; $i < count($array); $i++) { 
            if ($array[$i]>$middle) {
                $right[] = $array[$i];//如果$array[$i]大于中间值,就放到中间值得右边
            }else{
                $left[] = $array[$i];//如果$array[$i]小于中间值,就放到中间值的左边
            }
        }

        //排完一次序之后在继续比较,直到所有的元素都排序完为止1
        $right = $this->quickly($right);
        $left = $this->quickly($left);

        //合并排序好的数组
        return array_merge($left,array($middle),$right);

    }
}

$arr = array(14,13,12,16,1,20,12);
$sort = new Sort();
$quickly = $sort->quickly($arr);
var_dump($quickly);
?>

 

输出
array (size=7)
  0 => int 1
  1 => int 12
  2 => int 12
  3 => int 13
  4 => int 14
  5 => int 16
  6 => int 20

冒泡排序

<?php
Class Sort
{
    //冒泡排序
    public function bubble($arr)
    {   
        for ($i=0; $i < count($arr); $i++) { 
            for ($j=0; $j < count($arr)-1; $j++) {
                //这一步比较数组里元素的大小,进行换位 
                if ($arr[$i] < $arr[$j]) {
                    $tmp = $arr[$i];//$tmp是临时变量,临时存储数组的值
                    $arr[$i] = $arr[$j];//把数组中的值进行替换,此时$arr[$i]的键对应的就是$arr[$j]的值
                    $arr[$j] = $tmp;//因为已经把$arr[$j]的值替换了$arr[$i],所以现在把之前临时变量存储的值替换此时$arr[$j]的值
                }
            }
        }
        return $arr;
    }
}

$sort = new Sort();
$arr = array(14,13,12,16,1,20,12);
$bubble = $sort->bubble($arr);
var_dump($bubble);
?>

输出

array (size=7)

  0 => int 1
  1 => int 12
  2 => int 12
  3 => int 13
  4 => int 14
  5 => int 16
  6 => int 20

 

posted @ 2018-12-07 16:27  王彭雷  阅读(158)  评论(0编辑  收藏  举报