使用php来实现常用三种排序方法:

    冒泡、选择、插入中,最优的是插入排序,我就把插入排序的流程画下来了:

    插入排序法的流程图:

        插入排序的代码:

复制代码
function InsertSort(&$arr){
    for ($i=1;$i<count($arr);$i++){
        // 带插入的值
        $insertVal = $arr[$i];
        // 要比较的位置下标
        $insertIndex = $i -1;
        while ($insertIndex>=0 && $insertVal<$arr[$insertIndex]){
            // 如果被比较数的下标大于等于0;插入的值比被比较的值小,则将被比较的值想后移
            $arr[$insertIndex+1] = $arr[$insertIndex];
            $insertIndex--;
        }
        // 插入insertVal
        if($insertIndex+1 != $i){
            $arr[$insertIndex+1] = $insertVal;
        }
    }
}
复制代码

    下面的三种排序法的代码:

 1 <?php
复制代码
 2 /**
 3  * Created by PhpStorm.
 4  * User: xxx
 5  * Date: 2016/10/12
 6  * Time: 21:38
 7  */
 8 // 冒泡排序法
 9 function maopao_sort(&$arr){
10     // 外循环 控制趟数 只需要count($arr)-1趟就可以完成排序
11     for($i=0;$i<count($arr)-1;$i++){
12         // 内循环控制每一趟,找出最大的那个数:ccount($arr)-1-$i
13         for($j=0;$j<count($arr)-1-$i;$j++){
14             if ($arr[$j] > $arr[$j+1]){
15                 $temp = $arr[$j+1];
16                 $arr[$j+1] = $arr[$j];
17                 $arr[$j] = $temp;
18             }
19         }
20     }
21 }
22 
23 //选择排序法
24 function SelectSort(&$arr){
25     for($i=0;$i<count($arr)-1;$i++){
26         // 假设的最小数
27         $minVal = $arr[$i];
28         //最小数的下标
29         $minIndex = $i;
30         for($j=$i+1;$j<count($arr);$j++){
31             if ($minVal>$arr[$j]){
32                 $minVal = $arr[$j];
33                 $minIndex = $j;
34             }
35         }
36         if ($i != $minIndex){
37             $temp = $arr[$i];
38             $arr[$i] = $minVal;
39             $arr[$minIndex] = $temp;
40         }
41     }
42 }
43 
44 // 插入排序法(小-->大)
45 function InsertSort(&$arr){
46     for ($i=1;$i<count($arr);$i++){
47         // 带插入的值
48         $insertVal = $arr[$i];
49         // 要比较的位置下标
50         $insertIndex = $i -1;
51         while ($insertIndex>=0 && $insertVal<$arr[$insertIndex]){
52             // 如果被比较数的下标大于等于0;插入的值比被比较的值小,则将被比较的值想后移
53             $arr[$insertIndex+1] = $arr[$insertIndex];
54             $insertIndex--;
55         }
56         // 插入insertVal
57         if($insertIndex+1 != $i){
58             $arr[$insertIndex+1] = $insertVal;
59         }
60     }
61 }
62 
63 
64 $arr = array(10,2,0,-23,90,-100,400);
65 //maopao_sort($arr);
66 //SelectSort($arr);
67 InsertSort($arr);
68 echo var_dump($arr)."<br>";
69 print_r($arr);
复制代码

 快速排序法:

复制代码
 1 <?php
 2 function quickSort(&$arr){
 3     if(count($arr)>1){
 4         $k=$arr[0];
 5         $x=array();
 6         $y=array();
 7         $_size=count($arr);
 8         for($i=1;$i<$_size;$i++){
 9             if($arr[$i]<=$k){
10                 $x[]=$arr[$i];
11             }elseif($arr[$i]>$k){
12                 $y[]=$arr[$i];
13             }
14         }
15         $x=quickSort($x);
16         $y=quickSort($y);
17         return array_merge($x,array($k),$y);
18     }else{
19         return$arr;
20     }
21 }
22 ?>
复制代码

 

posted on 2017-10-11 22:45  石涛涛  阅读(277)  评论(0编辑  收藏  举报
友情链接:回力球鞋 | 中老年高档女装