一、冒泡排序
```
$arr = array(1,4,2,9,7,5,8);
//想辦法可以每次找出最大值得代碼重復執行
for($i=0;$len=count($arr);$i<$len;$i++){
//將最大值放到最右邊
for($j=0;$j<$len-1;$j++){
if($arr[$j]>$arr[$j+1]){
$tenp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $arr[$j]
}
}
}
```

```
//優化冒泡算法,將不需要的比較去掉
$arr = array(1,4,2,9,7,5,8);
for($i=0;$len=count($arr);$i<$len;$i++){
for($j=0;$j<$len-1-$i;$j++){
if($arr[$j]>$arr[$j+1]){
$tenp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $arr[$j]
}
}
}
```
二、選擇排序
```
$arr = array(1,4,2,9,7,5,8);
//確定要交換多少次,一次只能找到一個最小值,需要找數組長度對應的次數
for($i=0;$len = count($arr);$i<$len;$i++){
//假設當前第一個已經排好序
$min =$i;
//拿該最小的去比較剩余的其他
for($j=$i+1;$j<$len;$j++){
if($arr[$j]<$arr[$j+1]){
$min =$j;
}
}
if($min != $i){
$temp = $arr[$i];
$arr[$i] = $arr[$min];
$arr[$min] = $temp;
}
}
```

三、插入排序
```
$arr = array(1,4,2,9,7,5,8);
for($i=1;$len = count($arr);$i<$len;$i++){
//取出當前要插入的元素
$temp = $arr[$i];
//標記:默認說明當前要插入的數組的位置是對的
$change = false;
//讓該數據與前面已經排好序的數組元素重復比較(挨個比較),直到位置(交換)
for($j = $i-1;$j>=0;$j--){
if($arr[$j] > $temp){
//當前要插入的元素比前面已經排好序的元素小,交換位置
$arr[$j+1] = $arr[$j];
//前面順序的數組元素有不合適的位置,繼續比較
$change = true;
}else{
//插入元素比前面的都大
break;
}
}
//判斷是否需要交換位置
if($change){
$arr[$j+1] = $temp;
}
}
```

四、快速排序
```
$arr = array(1,4,2,9,7,5,8);
function quick_sort($arr){
//遞歸出口
$len = count($arr);
if($len < =1){
return $arr;
}
//取出某個元素,然后將剩余的數組元素分散到兩個不同的數組中
$left = $right=array();
for($i=1;$i<$len;$i++){
//第一個元素作為比較元素
if($arr[$i] < $arr[0]){
$left[] = $arr[$i];
}else{
$rigth = $arr[$i];
}
}
//$left和$right數組元素沒有排好序;遞歸點
$left = quick_sort($left);
$rigth = quick_sort($rigth );
//合并三個數組
return array_merge($left,(array)$arr[0],$right);
}
```

五、歸并排序
```
$arr = array(1,4,2,9,7,5,8);
function merge_sort($arr){
$len = count($arr);
if($len <= 1){
return $arr;
}
//拆分
$middle = floor($len/2);
$left = array_slice($arr,0,$middle);
$right = array_slice($arr,$middle);
//遞歸點:$left和$right都沒有排好序,而且可能是多個元素的數組
$left = merge_sort($left);
$right = merge_sort($right );
//假設左右兩邊都已經排好序,二路歸并
$m = array();
while(count($left) && count($right)){
//只要$left和$right里面還有元素就進行循環
//取出每個數組的第一個元素,進行比較
$m[] = $left[0] < $right[0]?array_shift($left):array_shift($right);
}
//返回結果
return array_merge($m,$left,$right);
}
```
