1. 程式人生 > >PHP--冒泡、選擇、插入排序法

PHP--冒泡、選擇、插入排序法

常用 eat echo alt created .cn use ges select

使用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 ?>
技術分享

PHP--冒泡、選擇、插入排序法