PHP常用的四种排序
所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。在各个领域中考虑到数据的各种限制和规范,要得到一个符合实际的优秀算法,得经过大量的推理和分析。
1.冒泡排序
1,比较相邻的元素。如果第一个比第二个大,就交换他们两个.
2,对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数.
3,针对所有的元素重复以上的步骤,除了最后一个.
4,持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较.
4 6 5 3 2
4 5 6 3 2
4 5 3 6 2
4 5 3 2 6
4 3 5 2 6
4 3 2 5 6
3 4 2 5 6
3 2 4 5 6
2 3 4 5 6
$arr = array(4,6,5,3,2);
$len = count($arr);
for($i=0;$i<$len;$i++)
{
for($j=$i+1;$j<$len;$j++)
{
if($arr[$i]>$arr[$j])
{
$tmp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $tmp;
}
}
}
print_r($arr);
2.插入排序
1,从第一个元素开始,该元素可以认为已经被排序.
2,取出下一个元素,在已经排序的元素序列中从后向前扫描.
3,如果该元素(已排序)大于新元素,将该元素移到下一位置.
4,重复步骤3,直到找到已排序的元素小于或者等于新元素的位置.
5,将新元素插入到该位置中.
6,重复步骤2 .
4 6 5 2 3
4 5 6 3 2
4 5 3 6 2
4 3 5 6 2
3 4 5 6 2
3 4 5 2 6
3 4 2 5 6
3 2 4 5 6
2 3 4 5 6
$arr = array(2,1,4,3,10,1);
$len = count($arr);
for($i=1,$len=$len;$i<$len;$i++)
{
$tmp = $arr[$i];
for($j=$i-1;$j>=0;$j--)
{
if($tmp<$arr[$j])
{
$arr[$j+1] = $arr[$j];
$arr[$j] = $tmp;
}
else
{
break;
}
}
}
print_r($arr);
3.选择排序
1,首先在未排序序列中找到最小元素,存放到排序序列的起始位置.
2,然后再从剩余未排序元素中继续寻找最小元素,放到排序序列末尾.
3,以此类推,直到所有元素均排序完毕.
4 6 5 3 2
2 6 5 3 4
2 3 5 6 4
2 3 4 6 5
2 3 4 5 6
$arr = array(2,1,5,10,5,3);
$len = count($arr);
for($i=0;$i<$len-1;$i++)
{
$tmp = $i;
for($j=$i+1;$j<$len;$j++)
{
if($arr[$tmp]>$arr[$j])
{
$tmp = $j;
$res = $arr[$tmp];
$arr[$tmp] = $arr[$i];
$arr[$i] = $res;
}
}
}
print_r($arr);
4.快速排序
1,先选取第一个值.
2,把比中间值小的放到左侧,比中间值大的放到右侧.
3,然后再分别对左侧和右侧数据递归调用1,2步,合并左侧、中间值、右侧数据.
7 5 9 10 6 4 8
7 5 9 10 6 4 8
left : 5 6 4 7 right : 9 10 8
5 6 4 7 9 10 8
4 5 6 7 8 9 10
function fast($arr){
if(count($arr)<=1)
{
return $arr;
}
$leftarr = array();
$rightarr = array();
$sum = $arr[0];
for($i=1;$i<count($arr);$i++)
{
if($arr[$i]>$sum)
{
$rightarr[] = $arr[$i];
}
else
{
$leftarr[] = $arr[$i];
}
}
$leftarr = fast($leftarr);
$rightarr = fast($rightarr);
return array_merge($leftarr,array($sum),$rightarr);
}
$arr = array(2,1,3,10,2,5);
print_r(fast($arr));
`
- 上一篇: 关于checkbox值回显
- 下一篇: 用php实现几种常见的排序算法