搜索
首页php教程php手册php排序算法?php排序经典算法

php排序算法?php排序经典算法

Jun 13, 2016 am 09:49 AM
php几个总结排序文章算法经典

本文章来给大家总结几个不错的php排序算法,希望这些算法对各位同学会有所帮助哦。

 代码如下 复制代码
 代码如下 复制代码


1.冒泡算法,排序算法,由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序

$array = array(a,f,c,b,e,h,j,i,g); 

   function maopao_fun($array){ 

       if($len

           return $arr; 

       } 

       $count = count($array); 

       for($i=0;$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; 

   } 

2.快速排序,
快速排序(Quicksort)是对冒泡排序的一种改进。
由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,
其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,
整个排序过程可以递归进行,以此达到整个数据变成有序序列。

function quickSort($arr){ 

       $len = count($arr); 

       if($len

           return $arr; 

       } 

       $key = $arr[0]; 

       $left_arr    = array(); 

       $right_arr    = array(); 

       for($i=1; $i

           if($arr[$i]

               $left_arr[] = $arr[$i]; 

           } else { 

               $right_arr[] = $arr[$i]; 

           } 

       } 

       $left_arr    = quickSort($left_arr); 

       $right_arr    = quickSort($right_arr); 

       return array_merge($left_arr, array($key), $right_arr); 

   } 


1.冒泡算法,排序算法,由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序 $array = array(a,f,c,b,e,h,j,i,g);     function maopao_fun($array){         if($len            return $arr;         }         $count = count($array);         for($i=0;$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;     }  2.快速排序,
快速排序(Quicksort)是对冒泡排序的一种改进。
由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,
其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,
整个排序过程可以递归进行,以此达到整个数据变成有序序列。 function quickSort($arr){         $len = count($arr);         if($len            return $arr;         }         $key = $arr[0];         $left_arr    = array();         $right_arr    = array();         for($i=1; $i            if($arr[$i]                $left_arr[] = $arr[$i];             } else {                 $right_arr[] = $arr[$i];             }         }         $left_arr    = quickSort($left_arr);         $right_arr    = quickSort($right_arr);         return array_merge($left_arr, array($key), $right_arr);     } 

3.选择排序
每一趟从待排序的数据元素中选出最小(或最大)的一个元素,
顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法

 代码如下 复制代码
 代码如下 复制代码

function select_sort($arr){ 

    $count = count($arr); 

    for($i=0; $i

        for($j=$i 1; $j

            if ($arr[$i] > $arr[$j]){ 

                $tmp = $arr[$i]; 

                $arr[$i] = $arr[$j]; 

                $arr[$j] = $tmp; 

            } 

        } 

    } 

    return $arr; 

function select_sort($arr){ 


    $count = count($arr); 

    for($i=0; $i
        for($j=$i 1; $j

            if ($arr[$i] > $arr[$j]){ 
 代码如下 复制代码

function insert_sort($arr){ 

        $count = count($arr); 

        for($i=1; $i

            $tmp = $arr[$i]; 

            $j = $i - 1; 

            while($arr[$j] > $tmp){ 

                $arr[$j 1] = $arr[$j]; 

                $arr[$j] = $tmp; 

                $j--; 

            } 

        } 

        return $arr; 

    } 

  

    $arr = array(49,38,65,97,76,13,27); 

    print_r(insert_sort($arr));


 

                $tmp = $arr[$i];                  $arr[$i] = $arr[$j];                  $arr[$j] = $tmp;              }          }      }      return $arr;  } 
4.插入排序   从第一个元素开始,该元素可以认为已经被排序   取出下一个元素,在已经排序的元素序列中从后向前扫描   如果该元素(已排序)大于新元素,将该元素移到下一位置   重复步骤3,直到找到已排序的元素小于或者等于新元素的位置   将新元素插入到下一位置中   重复步骤2
 代码如下 复制代码
function insert_sort($arr){          $count = count($arr);          for($i=1; $i             $tmp = $arr[$i];              $j = $i - 1;              while($arr[$j] > $tmp){                  $arr[$j 1] = $arr[$j];                  $arr[$j] = $tmp;                  $j--;              }          }          return $arr;      }         $arr = array(49,38,65,97,76,13,27);      print_r(insert_sort($arr));  

四种排序算法的PHP实现

1) 插入排序(Insertion Sort)的基本思想是:
每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。
2) 选择排序(Selection Sort)的基本思想是:
每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。
3) 冒泡排序的基本思想是:
两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。
4) 快速排序实质上和冒泡排序一样,都是属于交换排序的一种应用。所以基本思想和上面的冒泡排序是一样的。

 代码如下 复制代码

 /**
 * 四种排序算法设计(PHP)
 *
 * 1) 插入排序(Insertion Sort)的基本思想是:
   每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。
   2) 选择排序(Selection Sort)的基本思想是:
      每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。
   3) 冒泡排序的基本思想是:
      两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。
   4) 快速排序实质上和冒泡排序一样,都是属于交换排序的一种应用。所以基本思想和上面的冒泡排序是一样的。
 *
 * @author quanshuidingdang
 */
类排序 {
 私有 $arr = array(); 
 私人 $sort = '插入';
 私人 $marker = '_sort';
 
 私人 $debug = TRUE;
 
 /**
  * 构造函数
  *
  * @param array 例如: $config = array (
         'arr' => array(22,3,41,18) ,  //需要排序的数组值
         'sort' => 'insert',      //可能值: insert, select, bubble, quick
         'debug' => TRUE        //可能值: TRUE, FALSE
         )
 */
 公共函数 __construct($config = array()) {
  if ( count($config) > 0) {
   $this->_init($config);
  }
 }
 
 /**
  * 获取排序结果
 */
 公共函数显示(){
  返回 $this->arr;
 }
 
 /**
  * 初始化
  *
  * @param array
  * @return  bool
 */
 私有函数_init($config = array()) {
  //参数判断
  if ( !is_array($config) OR count($config) == 0) {
   if ($this->debug === TRUE) {
    $this->_log("sort_init_param_invaild");
   }
   返回FALSE;
  }
  
  //初始化成员变量
  foreach ($config as $key => $val) {
   if ( isset($this->$key)) {
    $this->$key = $val;
   }
  }
  
  //调用相应的成员方法完成排序
  $method = $this->sort 。 $this->标记;
  if ( !method_exists($this, $method)) {
   if ($this->debug === TRUE) {
    $this->_log("sort_method_invaild");
   }
   返回FALSE;
  }
  
  if ( FALSE === ($this->arr = $this->$method($this->arr)))
   返回FALSE;
  返回 TRUE;
 }
 
 /**
  * 插入排序
  *
  * @param array
  * @return bool
 */
 私有函数 insert_sort($arr) {
  //参数判断
  if ( !is_array($arr) OR count($arr) == 0) {
   if ($this->debug === TRUE) {
    $this->_log("sort_array(insert)_invaild");
   }
   返回FALSE;
  }
  
  //具体实现
  $count = count($arr);
  for ($i = 1; $i    $tmp = $arr[$i];
   for($j = $i-1; $j >= 0; $j--) { 
    if($arr[$j] > $tmp) {
     $arr[$j 1] = $arr[$j];
     $arr[$j] = $tmp;
    }
   }
  }
  返回 $arr;
 }
 
 /**
  * 选择排序
  *
  * @param array
  * @return bool
 */
 私有函数 select_sort($arr) {
  //参数判断
  if ( !is_array($arr) OR count($arr) == 0) {
   if ($this->debug === TRUE) {
    $this->_log("sort_array(select)_invaild");
   }
   返回FALSE;
  }
  
  //具体实现
  $count = count($arr);
  for ($i = 0; $i    $min = $i;
   for ($j = $i 1; $j     if ($arr[$min] > $arr[$j])  $min = $j;
   }
   if ($min != $i) {
    $tmp = $arr[$min];
    $arr[$min] = $arr[$i];
    $arr[$i] = $tmp;
   }
  }
  返回 $arr;
 }
 
 /**
  * 冒泡排序
  *
  * @param array
  * @return bool
 */
 私有函数 bubble_sort($arr) {
  //参数判断
  if ( !is_array($arr) OR count($arr) == 0) {
   if ($this->debug === TRUE) {
    $this->_log("sort_array(bubble)_invaild");
   }
   返回FALSE;
  }
  
  //具体实现
  $count = count($arr);
  for ($i = 0; $i    for ($j = $count-1; $j > $i; $j--) {
    if ($arr[$j]      $tmp = $arr[$j];
     $arr[$j] = $arr[$j-1];
     $arr[$j-1] = $tmp;
    }
   }
  }
  返回$arr; 
 }
 
 /**
  * 快速排序
  *
  * @param array
  * @return bool
 */
 私有函数quick_sort($arr) {
  //具体实现
  if (count($arr)   $key = $arr[0];
  $left_arr = array();
  $right_arr = array();
  for ($i = 1; $i    if ($arr[$i]     $left_arr[] = $arr[$i];
   其他
    $right_arr[] = $arr[$i];
  }
  $left_arr = $this->quick_sort($left_arr);
  $right_arr = $this->quick_sort($right_arr);

  return array_merge($left_arr, array($key), $right_arr);
 }
 
 /**
  * 日志记录
 */
 私有函数_log($msg) {
  $msg = '日期[' .日期('Y-m-d H:i:s') 。 ']'。 $消息。 'n';
  return @file_put_contents('sort_err.log', $msg, FILE_APPEND);
 }
}

/*sort.php 文件结尾*/
/*位置 htdocs/sort.php */

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前By尊渡假赌尊渡假赌尊渡假赌
威尔R.E.P.O.有交叉游戏吗?
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境