牛骨文教育服务平台(让学习变的简单)
博文笔记

PHP常用的四种排序

创建时间:2016-11-07 投稿人: 浏览次数:917

      所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。在各个领域中考虑到数据的各种限制和规范,要得到一个符合实际的优秀算法,得经过大量的推理和分析。

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));

`

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。