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 )