PHP排序算法

转载 2012年03月27日 20:36:57

对于PHP中对数组的元素进行排序,这个是很经常用到的,之前的项目中也有,而且对于几种排序我们都是用的是asort  arsort 等PHP原生函数,没有自己去实现,所以就对一下的几个函数进行总结,这个会不断的进行补充,自己也可以好好的复习和总结。

直接上代码吧!

   
<?php
/*
 * 插入排序(一维数组)
 * 每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当的位置,使数列依然有序;直到待排序的数据元素全部插入完成为止。
 */
function insertSort($arr){
    if(!is_array($arr) || count($arr)==0){
        return$arr;
    }
    $count= count($arr);
    for($i=1;$i<$count;$i++){
        if(isset($arr[$i])){
       $tmp = $arr[$i];//获取后一个元素的值
       $j = $i- 1; //获取前面的下标
       while($arr[$j] >$tmp){ //如果前面一个比后面一个大, 这里是从小到大
           $arr[$j+1] =$arr[$j];//把小的元素和前面的对换,直到移动到合适的位置,在移动下一个
           $arr[$j] =$tmp;
           $j--;
        }
        }
    }
    return$arr;
}
  
/*
 * 选择排序(一维数组)
 * 每一趟从待排序的数据元素中选出最小(最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
 */
functionselectSort($arr){
    if(!is_array($arr) || count($arr) == 0)
    {
        return$arr;
    }
    $count= count($arr);
    for($i=0;$i<$count;$i++){
        $k= $i;
        for($j=$i+1;$j<$count;$j++){
      if($arr[$k] >$arr[$j])
        $k= $j;//找出最小的
       if ($k!= $i){
           $tmp = $arr[$i];
           $arr[$i] =$arr[$k];
           $arr[$k] =$tmp;
          }
       }
    }
    return$arr;
}
 
/*  
 * 冒泡排序(一维数组)
 * 两两比较待排序数据元素的大小,发现两个数据元素的次序相反即进行交换,直到没有反序的数据元素为止
 */
functionbubbleSort($array){
    $count= count($array);
    if($count <= 0) {
        returnfalse;
    }
    for($i=0;$i<$count;$i++){
        for($j=$count-1;$j>$i;$j--){
           if($array[$j] <$array[$j-1]){//比较找到的数进行交换
            $tmp= $array[$j];
            $array[$j] =$array[$j-1];
            $array[$j-1] =$tmp;
           }
        }
    }
    return$array;
}
  
/*
 * 快速排序(一维数组)
 *
 */
functionquickSort($array){
    if(count($array) <= 1){
        return$array;
    }
    $key= $array[0];
    $left_arr= array();
    $right_arr= array();
    for($i=1;$i<count($array);$i++){
      if($array[$i] <=$key){
           $left_arr[] =$array[$i];
      }else{
         $right_arr[] =$array[$i];
        }
    }
    $left_arr= quickSort($left_arr);
    $right_arr= quickSort($right_arr);
    returnarray_merge($left_arr,array($key),$right_arr);
}
 
/**
  * 按照元素的值进行排序
  * strOrder 为排列的顺序 asc 升序  desc 降序
  */
functionsortByVal($arr,$strOrder='asc')
{
    if(!is_array($arr) || count($arr)==0)
    {
        return$arr;
    }
 
    $arrReturn= array();
    foreach($arras $key=>$val)
    {
        $arrKey[] =$key;
        $arrVal[] =$val;
    }
 
    $count= count($arrVal);
    if($count)
    {
        //创建key的顺序数组
        for($key=0;$key<$count;$key++)
        {
            $arrKeyMap[$key] =$key; 
        }
        //对值进行排序
        for($i=0;$i<$count;$i++)
        {  
             
            for($j= $count-1;$j>$i;$j--)
            {
                //<从小到大排列 升降在这修改
                $bol= $strOrder == 'asc' ? $arrVal[$j]<$arrVal[$j-1] : $arrVal[$j]>$arrVal[$j-1];
                if($bol){
                    $tmp= $arrVal[$j];
                    $arrVal[$j] =$arrVal[$j-1];
                    $arrVal[$j-1] =$tmp;
                    //值的冒泡排序,引起key的数组的交互   
                    $keytmp= $arrKeyMap[$j];
                    $arrKeyMap[$j] =$arrKeyMap[$j-1];
                    $arrKeyMap[$j-1] =$keytmp;
                }
            }
        }
        if(count($arrKeyMap))
        {
            foreach($arrKeyMap as $val)
            {
                    $arrReturn[] =$arrKey[$val];
            }
        }
        return$arrReturn;
    }
}
 
 
/**
  * 使用原生的函数进行数组按照值进行排列
  */
functionarraySortByVal($arr,$keys,$type='asc'){
    $keysvalue= $new_array = array();
    foreach($arr as $k=>$v){
        $keysvalue[$k] =$v[$keys];
    }
    if($type== 'asc'){
        asort($keysvalue);
    }else{
        arsort($keysvalue);
    }
    reset($keysvalue);
    foreach($keysvalue as $k=>$v){
        $new_array[$k] =$arr[$k];
    }
    return$new_array;
} 

对于下面的2个对于array的值进行排序的方法一个是自己实现的一个是使用了原生的PHP函数的,其实排序对于少量数据一般就单页的数据量的数据还是可以的,如果涉及到大量的数据的排序,建议可以整合到MYSQL的基础类中来进行。

 


PHP 排序算法源代码

  • 2015年11月07日 14:04
  • 4KB
  • 下载

php各种数组的排序算法

  • 2010年08月08日 23:24
  • 2KB
  • 下载

php常用的四种排序算法

http://m.blog.csdn.net/article/details?id=6449479 纯当练习,高手请绕过。以一维数组为例。 1.插入排序 思想: 每次将一个待排序的...

PHP实现四种基本排序算法

前提:分别用冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中的值按照从小到大的顺序进行排序。  $arr(1,43,54,62,21,66,32,78,36,76,39);   1...

用php实现的各种排序算法总结

用PHP实现的各种排序算法,冒泡排序,交换排序,选择法排序,插入法排序,快速排序,根据实际情况可选择不同的排序算法。效率也有所不同。 重要的还是先理解了算法,实现起来才水到渠成。冒泡排序:...

PHP实现四种基本排序算法

许多人都说算法是程序的核心,算法的好坏决定了程序的质量。作为一个初学者,虽然很少接触到算法方面的东西。但是对于基本的排序算法还是应该掌握的,它是程序开发的必备工具。...

PHP常见排序算法整理学习

题记: 常见的排序算法有:冒泡排序法,快速排序法,选择排序法,插入排序法,此处作为自己最近面试准备进行的学习笔记,同时也希望能帮到你。 需求:将一个有多个数字的数组进行从小到大的排序....

PHP 排序算法的实现

所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个...
  • zalion
  • zalion
  • 2016年09月06日 14:36
  • 145

经典排序算法的PHP实现类

近期广受笔试摧残,对于各种排序也是晕头转向。 更坑爹的是貌似大多都是用C++、Java实现相关算法,让我搞PHP的情何以堪,更何况,PHP本身就有排序函数sort(),其实来说,是很简单的,这也可能...

JS及PHP代码编写八大排序算法

从学习数据结构开始就接触各种算法基础,但是自从应付完考试之后就再也没有练习过,当在开发的时候也是什么时候使用什么时候去查一下,现在在学习JavaScript,趁这个时间再把各种基础算法整理一遍,分别以...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP排序算法
举报原因:
原因补充:

(最多只允许输入30个字)