写这篇博客就是为了记录自己重新学习的经历,好久没码代码了,发现连基本的以前学过的排序算法都不太记得了,刚好在学PHP语言,就顺便记录一下,以下所举的案例都是基础的,也是我从视频里学来的(可以理解为默写吧>_<),打开这篇文章的大佬们,有错请指出,不喜勿喷,感谢。
冒泡排序
<?php
//冒泡排序
$arr=array(3,9,1,4,0,13,6,2,10);
$len=count($arr);
for($i=0;$i<$len;$i++){
for($j=0;$j<$len-1-$i;$j++){ //每次循环把大的往后放
if($arr[$j]>$arr[$j+1]){
$temp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$temp;
}
}
}
print_r($arr);
?>
---------
输出结果:Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 6 [6] => 9 [7] => 10 [8] => 13 )
选择排序
<?php
//快速排序
$arr=array(3,9,1,4,0,13,6,2,10);
$len=count($arr);
for($i=0;$i<$len;$i++){
$min=$i;
for($j=$i+1;$j<$len;$j++){
if($arr[$j]<$arr[$min]){
$min=$j; //记下最小那个数的下标
}
}
if($min!=$i){ //把选择所得的那个最小的数往前放
$temp=$arr[$i];
$arr[$i]=$arr[$min];
$arr[$min]=$temp;
}
}
print_r($arr);
?>
-------------
结果:Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 6 [6] => 9 [7] => 10 [8] => 13 )
插入排序
<?php
//插入排序:每步将1个待排序的记录,按关键字码值的大小插入前面已经排好序的文件适当的位置,知道全部插入完为止
$arr=array(3,9,1,4,0,13,6,2,10);
$len=count($arr);
$change=false; //标记:默认位置是对的,不用交换
//确定要插入多少回
for($i=1;$i<$len;$i++){
$temp=$arr[$i]; //取出当前要插入的元素的值
//比较
for($j=$i-1;$j>=0;$j--){
if($arr[$j]>$temp){
$arr[$j+1]=$arr[$j]; //这个时候进行的交换,其实是相当于temp元素后面的每个元素往后移一个位置
//$arr[$j]=$temp;
$change=true; //说明当前顺序的元素有不合适的位置
}else{
break;
}
}
//判断位置是否需要改变
if($change){
$arr[$j+1]=$temp;
}
}
print_r($arr);
?>
结果:Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 6 [6] => 9 [7] => 10 [8] => 13 )
快速排序
<?php
//快速排序:用的递归算法
$arr=array(3,9,1,4,0,13,6,2,10);
function quick_sort($arr){
//递归出口
$len=count($arr);
if($len<=1) return $arr;
//取出某个元素,其余元素分为两边
$left=$right=array();
for($i=1;$i<$len;$i++){ //从1开始,因为第0个元素作为参照物
if($arr[$i]<$arr[0]){
$left[]=$arr[$i];
}else{
$right[]=$arr[$i];
}
}
$left=quick_sort($left);
$right=quick_sort($right);
return array_merge($left,(array)$arr[0],$right); //合并数组
}
echo '<pre>';
print_r(quick_sort($arr));
?>
结果:Array
(
[0] => 0
[1] => 1
[2] => 2
[3] => 3
[4] => 4
[5] => 6
[6] => 9
[7] => 10
[8] => 13
)
归并排序
<?php
//归并排序
$arr=array(3,9,1,4,0,13,6,2,10);
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=merge_sort($left);
$right=merge_sort($right);
//假设左边和右边已经排好序,二路归并
$m=array();
while(count($left)&&count($right)){
$m[]=$left[0]<$right[0] ? array_shift($left) : array_shift($right); //哪个小,就哪个放进$m[]
}
//返回结果
return array_merge($m,$left,$right);
}
echo '<pre>';
print_r(merge_sort($arr));
?>
结果:Array
(
[0] => 0
[1] => 1
[2] => 2
[3] => 3
[4] => 4
[5] => 6
[6] => 9
[7] => 10
[8] => 13
)
上面介绍了5中常见的基础排序算法,所用的语言是PHP,感觉自己对算法的理解能力还是有点差,这东西还是得花时间去理解透彻比较好,不然一段时间不接触就感觉很生疏,接下来要花时间重新码代码啦!!!