1.冒泡排序
冒泡排序法的基本原理就是通過依次比較相鄰的兩個數,將小數放前,大數放後,最大的那個數依次冒出來。
<?php
//冒泡排序
function maopao_sort( $arr){
$num = count( $arr);
if( $num <= 0) return false;
for( $i = 0; $i < $num - 1; $i++){
for( $j = 0; $j < $num - 1 - $i; $j++){
if($arr[$j] > $arr[$j+1]){
$temp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $temp;
}
}
}
return $arr;
}
$test = array(11,4,2,5,1,14,9,3);
print_r( maopao_sort( $test));
?>
該段代碼輸出爲
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 11 [7] => 14 )
排序過程
原始數組爲 Array( [0] => 11 [1] => 4 [2] => 2 [3] => 5 [4] => 1 [5] => 14 [6] => 9 [7] => 3)
第一輪排序 Array( [0] => 4 [1] => 2 [2] => 5 [3] => 1 [4] => 11 [5] => 9 [6] => 3 [7] => 14)
第二輪排序 Array( [0] => 2 [1] => 4 [2] => 1 [3] => 5 [4] => 9 [5] => 3 [6] => 11 [7] => 14)
第三輪排序 Array( [0] => 2 [1] => 1 [2] => 4 [3] => 5 [4] => 3 [5] => 9 [6] => 11 [7] => 14)
第四輪排序 Array( [0] => 1 [1] => 2 [2] => 4 [3] => 3 [4] => 5 [5] => 9 [6] => 11 [7] => 14)
第五輪排序 Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 11 [7] => 14)
第六輪排序 Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 11 [7] => 14)
第七輪排序 Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 11 [7] => 14)
2.插入排序
插入排序的基本原理就是把數組分成無序和有序2個區域,依次從無序區拿出一個數,放到有序區相應的位置上。
<?php
//插入排序
function charu_sort( $arr){
$num = count( $arr);
if( $num <= 0) return false;
for( $i = 1; $i < $num; $i++){
$temp = $arr[$i];
$j = $i - 1;
while($j >= 0 && $arr[$j] > $temp){
$arr[$j+1] = $arr[$j];
$j--;
}
$arr[$j+1] = $temp;
}
return $arr;
}
$test = array(11,4,2,5,1,14,9,3);
print_r( charu_sort( $test));
?>
該段代碼輸出爲
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 11 [7] => 14 )
排序過程
原始數組爲 Array( [0] => 11 [1] => 4 [2] => 2 [3] => 5 [4] => 1 [5] => 14 [6] => 9 [7] => 3)
第一輪排序 Array( [0] => 4 [1] => 11 [2] => 2 [3] => 5 [4] => 1 [5] => 14 [6] => 9 [7] => 3)
第二輪排序 Array( [0] => 2 [1] => 4 [2] => 11 [3] => 5 [4] => 1 [5] => 14 [6] => 9 [7] => 3)
第三輪排序 Array( [0] => 2 [1] => 4 [2] => 5 [3] => 11 [4] => 1 [5] => 14 [6] => 9 [7] => 3)
第四輪排序 Array( [0] => 1 [1] => 2 [2] => 4 [3] => 5 [4] => 11 [5] => 14 [6] => 9 [7] => 3)
第五輪排序 Array( [0] => 1 [1] => 2 [2] => 4 [3] => 5 [4] => 11 [5] => 14 [6] => 9 [7] => 3)
第六輪排序 Array( [0] => 1 [1] => 2 [2] => 4 [3] => 5 [4] => 9 [5] => 11 [6] => 14 [7] => 3)
第七輪排序 Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 11 [7] => 14)
3.選擇排序
選擇排序即是每一趟從待排序的數組中選出1個最小的數,順序擺放,一直到選完爲止。<?php
//選擇排序
function xuanze_sort( $arr){
$num = count( $arr);
if( $num <= 0) return false;
for( $i = 0; $i < $num - 1; $i++){
$min = $i;
for($j = $i + 1; $j < $num; $j++){
if( $arr[$min] > $arr[$j]){
$min = $j;
}
}
$temp = $arr[$i];
$arr[$i] = $arr[$min];
$arr[$min] = $temp;
}
return $arr;
}
$test = array(11,4,2,5,1,14,9,3);
print_r( xuanze_sort( $test));
?>
該段代碼輸出爲
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 11 [7] => 14 )
排序過程
原始數組爲 Array( [0] => 11 [1] => 4 [2] => 2 [3] => 5 [4] => 1 [5] => 14 [6] => 9 [7] => 3)
第一輪排序 Array( [0] => 1 [1] => 4 [2] => 2 [3] => 5 [4] => 11 [5] => 14 [6] => 9 [7] => 3)
第二輪排序 Array( [0] => 1 [1] => 2 [2] => 4 [3] => 5 [4] => 11 [5] => 14 [6] => 9 [7] => 3)
第三輪排序 Array( [0] => 1 [1] => 2 [2] => 3 [3] => 5 [4] => 11 [5] => 14 [6] => 9 [7] => 4)
第四輪排序 Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 11 [5] => 14 [6] => 9 [7] => 5)
第五輪排序 Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 14 [6] => 9 [7] => 11)
第六輪排序 Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 14 [7] => 11)
第七輪排序 Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 11 [7] => 14)
4.快速排序
快速排序是以第一個元素爲key值,將所有比key小的元素排左邊,所有比key大的元素排右邊。這樣就完成了一趟快速排序,然後將左右2邊的元素,繼續按這樣的方式進行遞歸排序。直到剩下1個元素爲止。
<?php
//選擇排序
function kuaisu_sort( $arr){
$num = count( $arr);
if( $num <= 1) return $arr;
$left_arr = array();
$right_arr = array();
$key = $arr[0];
for( $i = 1; $i < $num; $i++){
if( $arr[$i] <= $key){
$left_arr[] = $arr[$i];
}
else{
$right_arr[] = $arr[$i];
}
}
$left_arr = kuaisu_sort( $left_arr);
$right_arr = kuaisu_sort( $right_arr);
return array_merge($left_arr, array($key), $right_arr);
}
$test = array(11,4,2,5,1,14,9,3);
print_r( kuaisu_sort( $test));
?>
該段代碼輸出爲
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 11 [7] => 14 )