最常見的算法,用PHP如何實現 (2016-06-12 19:53:17)

1、冒泡排序


1

2

3

4

5

6

7

8

9

10

11

12

13

function bubble_sort($arr) {

    $n=count($arr);

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

       for($j=$i 1;$j<$n;$j ) {

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

              $temp=$arr[$i];

              $arr[$i]=$arr[$j];

              $arr[$j]=$temp;

           }

       }

    }

    return $arr;

}

2、歸併排序


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

function Merge(&$arr, $left, $mid, $right) {

  $i = $left;

  $j = $mid 1;

  $k = 0;

  $temp = array();

  while ($i <= $mid&& $j <= $right)

  {

    if ($arr[$i]<= $arr[$j])

     $temp[$k ] = $arr[$i ];

    else

     $temp[$k ] = $arr[$j ];

  }

  while ($i <= $mid)

    $temp[$k ] = $arr[$i];

  while ($j <= $right)

    $temp[$k ] = $arr[$j];

  for ($i = $left, $j = 0; $i <=$right; $i , $j )

    $arr[$i] = $temp[$j];

}

 

function MergeSort(&$arr, $left, $right)

{

  if ($left < $right)

  {

    $mid = floor(($left$right) / 2);

    MergeSort($arr, $left,$mid);

    MergeSort($arr, $mid 1,$right);

    Merge($arr, $left, $mid,$right);

  }

}

3、二分查找-遞歸


1

2

3

4

5

6

7

8

9

10

11

12

13

function bin_search($arr,$low,$high,$value) {

   if($low>$high)

       return false;

    else {

       $mid=floor(($low $high)/2);

       if($value==$arr[$mid])

           return$mid;

       elseif($value<$arr[$mid])

           returnbin_search($arr,$low,$mid-1,$value);

       else

           returnbin_search($arr,$mid 1,$high,$value);

    }

}

4、二分查找-非遞歸


1

2

3

4

5

6

7

8

9

10

11

12

function bin_search($arr,$low,$high,$value) {

   while($low<=$high) {

       $mid=floor(($low $high)/2);

       if($value==$arr[$mid])

           return$mid;

       elseif($value<$arr[$mid])

          $high=$mid-1;

       else

           $low=$mid1;

    }

    return false;

}

5、快速排序


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

function quick_sort($arr) {

    $n=count($arr);

   if($n<=1)

       return $arr;

    $key=$arr[0];

    $left_arr=array();

    $right_arr=array();

   for($i=1;$i<$n;$i ) {

       if($arr[$i]<=$key)

          $left_arr[]=$arr[$i];

       else

          $right_arr[]=$arr[$i];

    }

   $left_arr=quick_sort($left_arr);

   $right_arr=quick_sort($right_arr);

    returnarray_merge($left_arr,array($key),$right_arr);

}

6、選擇排序


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

function select_sort($arr) {

    $n=count($arr);

   for($i=0;$i<$n;$i ) {

       $k=$i;

       for($j=$i 1;$j<$n;$j ) {

         if($arr[$j]<$arr[$k])

             $k=$j;

       }

       if($k!=$i) {

          $temp=$arr[$i];

          $arr[$i]=$arr[$k];

          $arr[$k]=$temp;

       }

    }

    return $arr;

}

7、插入排序


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

function insertSort($arr) {

    $n=count($arr);

   for($i=1;$i<$n;$i ) {

       $tmp=$arr[$i];

       $j=$i-1;

       while($arr[$j]>$tmp) {

           $arr[$j1]=$arr[$j];

          $arr[$j]=$tmp;

           $j--;

          if($j<0)

              break;

       }

    }

    return $arr;

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章