排序算法

一:冒泡算法

 1 <pre>

 2 <?php

 3 header('Content-Type:text/html;charset=utf-8');

 4 

 5 $array = array(20,34,8,27,3,41);

 6 

 7 for($k=0,$length=count($array);$k<$length-1;++$k){

 8     //>>1.第一次冒泡

 9     for($i=0,$length=count($array);$i<$length-1-$k;++$i){

10         if($array[$i]>$array[$i+1]){//相邻的元素进行比较

11             //>>交换相邻的位置上的数据

12             $temp = $array[$i];

13             $array[$i] =  $array[$i+1];

14             $array[$i+1] = $temp;

15         }

16     }

17 }

18 var_dump($array);

19 

20 

21 exit;

22 //>>1.第一次冒泡

23 for($i=0,$length=count($array);$i<$length-1-0;++$i){

24     if($array[$i]>$array[$i+1]){//相邻的元素进行比较

25         //>>交换相邻的位置上的数据

26         $temp = $array[$i];

27         $array[$i] =  $array[$i+1];

28         $array[$i+1] = $temp;

29     }

30 }

31 

32 //>>2.第二次冒泡

33 for($i=0,$length=count($array);$i<$length-1-1;++$i){

34     if($array[$i]>$array[$i+1]){//相邻的元素进行比较

35         //>>交换相邻的位置上的数据

36         $temp = $array[$i];

37         $array[$i] =  $array[$i+1];

38         $array[$i+1] = $temp;

39     }

40 }

41 

42 //>>3,第三次冒泡

43 for($i=0,$length=count($array);$i<$length-1-2;++$i){

44     if($array[$i]>$array[$i+1]){//相邻的元素进行比较

45         //>>交换相邻的位置上的数据

46         $temp = $array[$i];

47         $array[$i] =  $array[$i+1];

48         $array[$i+1] = $temp;

49     }

50 }

51 var_dump($array);
View Code

二:快速排序

 1 <pre>

 2 <?php

 3 header('Content-Type:text/html;charset=utf-8');

 4 

 5 $array = array(12,9,4,18,7,2,38,34,8,3,41);

 6 /*

 7  * 1.定义一个函数

 8  * 2.递归点:  在什么情况下继续调用当前方法

 9  * 3.递归出口: 在什么情况下不调用当前方法

10  */

11 /*

12  * @param  $array 待分割的数组

13  *

14  *

15  */

16 function quickSort($array){

17     //>>1.递归出口

18     $length = count($array);

19     if($length<=1){

20         return $array;

21     }

22     //>>2.开始分割

23 //    创建两个空数组分别来存放分割出来的大的和小的数.

24 //     $big = $small = array();

25        $big = array();

26        $small = array();

27        //从数组中取出第一个元素作为参考值

28        $tag = $array[0];

29        //循环完后才把大的放到$big,把小的放到$small

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

31             if($array[$i]<$tag){

32                 $small[] = $array[$i];

33             }else{

34                 $big[] = $array[$i];

35             }

36        }

37 

38 

39        //>>3. 递归点... 分割到最后一个的话就会返回,所以接收返回值

40       $big_sort = quickSort($big);

41       $small_sort = quickSort($small);

42        //>>4. 再进行合并

43     return array_merge($small_sort,array($tag),$big_sort);

44 

45 }

46 

47 

48 $result = quickSort($array);

49 var_dump($result);
View Code

 

你可能感兴趣的:(排序算法)