美文网首页
php 实现简单的算法

php 实现简单的算法

作者: 爱学习的小仙女呀 | 来源:发表于2018-05-12 09:32 被阅读0次

// echo intval('1a2b3c');

// die;

// $a = 5;

// $a = &$b;

// $b=3;

// echo $a;

// $a = 1;

// // 1+2+3+3

// $res = $a++ +$a+ ++$a +$a;

// echo $res;

// $a =3;

// $b =4;

// if($a = 3 ||$b = 4){

//    echo $a++;

//    echo $b++;

// }

// die;

class Sort{

//冒泡排序

/*

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。

它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。*/

/*

@author dzh

@time 2017/9/25

@content BubblsSort

@params array

*/

  public function BubblsSort($arr){

$length = count($arr);

      for ($i=1; $i < $length ; $i++) {

for ($j=0; $j < $length-$i ; $j++) {

if($arr[$j+1]>$arr[$j]){

//给数组中的 两个元素重新赋值

              list($arr[$j+1],$arr[$j])= [$arr[$j],$arr[$j+1]];

            }

}

}

return $arr;

  }

//快速排序

/*

快速排序(Quicksort)是对冒泡排序的一种改进。

快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:

通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。*/

/*

@author dzh

@time 2017/9/25

@content QuickSort

@params array

*/

  public function QuickSort($arr){

$length = count($arr);

      if($length<=1){

return $arr;

      }

//取基数

      $basic_num = $arr[0];

      // echo $basic_num;die;

      $before = [];

      $after  = [];

      for ($i=1; $i < $length; $i++) {

if($arr[$i]<$basic_num){

$before[] = $arr[$i];

            // print_r($before);die;

        }else{

$after[]  = $arr[$i];

            // print_r($after);die;

        }

}

$left  = $this->QuickSort($before);

      $right = $this->QuickSort($after);

      // print_r($right);die;

      $arr  = array_merge($left,[$basic_num],$right);

      return $arr;

  }

//选择排序

/*

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完*/

/*

@author dzh

@time 2017/9/26

@content SelectSort

@params array

*/

  public function SelectSort($arr){

$length = count($arr);

      for ($i=0; $i < $length-1; $i++) {

//假设最小值的位置是1

        //记录最小值的位置

        $min = $i;

        for ($j=$i+1; $j < $length; $j++) {

if($arr[$min]>$arr[$j]){

$min = $j;

            }

}

//如果最小值不在$i这个位置

        if($min != $i){

list($arr[$min],$arr[$i])= [$arr[$i],$arr[$min]];

        }

}

return $arr;

  }

//插入排序

/*

有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。*/

  public function InsertSort($arr){

$length = count($arr);

      for ($i=1; $i < $length; $i++) {

for ($j=$i-1; $j > 0; $j--) {

if($arr[$j+1]>$arr[$j]){

list($arr[$j+1],$arr[$j])= [$arr[$j],$arr[$j+1]];

            }else{

break;

            }

}

}

return $arr;

  }

//青蛙跳台阶

  public function steps($num){

if($num<=1){

return 1;

      }else{

return $this->steps($num-1)+$this->steps($num-2);

      }

}

}

$sort = new Sort();

//青蛙跳台阶

$num = 9;

echo $sort->steps($num);die;

$sort = new Sort();

$arr = [25,23,43,234,54,22,55,66];

// $data = $sort->BubblsSort($arr);

$data = $sort->QuickSort($arr);

$data[] = 33;

$res = $sort->SelectSort($data);

print_r($res);

?>

相关文章

网友评论

      本文标题:php 实现简单的算法

      本文链接:https://www.haomeiwen.com/subject/qrnzrftx.html