排序算法

一:冒泡算法

 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
原文地址:https://www.cnblogs.com/qzjpkfj/p/4051863.html