加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php排序算法?php排序传统算法

发布时间:2023-07-31 10:51:34 所属栏目:PHP教程 来源:
导读:php排序算法?php排序经典算法

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

$array = array(a,f,c,b,e,h,j,i,g);
//开源代码Cuoxin.c
php排序算法?php排序经典算法

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

$array = array(a,f,c,b,e,h,j,i,g);  
//开源代码Cuoxin.com 
   function maopao_fun($array){  
 
       if($len <= 1) {  
 
           return $arr;  
 
       }  
 
       $count = count($array);  
 
       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;  
 
   }  
2.快速排序

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

function quickSort($arr){  
 
       $len = count($arr);  
 
       if($len <= 1) {  
 
           return $arr;  
 
       }  
 
       $key = $arr[0];  
 
       $left_arr    = array();  
 
       $right_arr    = array();  
 
       for($i=1; $i<$len; $i++){  
 
           if($arr[$i] <= $key){  
 
               $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<$count; $i++){  
 
        for($j=$i+1; $j<$count; $j++){  
 
            if ($arr[$i] > $arr[$j]){  
 
                $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<$count; $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 
/** 
 *  
 * @author quanshuidingdang 
 */ 
class Sort { 
 private $arr  = array();  
 private $sort = 'insert'; 
 private $marker = '_sort'; 
 
 private $debug = TRUE; 
 
 /** 
  * 构造函数 
  * 
  * @param array 例如: $config = array ( 
         'arr' => array(22,3,41,18) ,  //需要排序的数组值 
         'sort' => 'insert',      //可能值: insert, select, bubble, quick 
         'debug' => TRUE        //可能值: TRUE, FALSE 
         ) 
  */ 
 public function __construct($config = array()) { 
  if ( count($config) > 0) { 
   $this->_init($config); 
  } 
 } 
 
 /** 
  * 获取排序结果 
  */ 
 public function display() { 
  return $this->arr; 
 } 
 
 /** 
  * 初始化 
  * 
  * @param array 
  * @return  bool 
  */ 
 private function _init($config = array()) { 
  //参数判断 
  if ( !is_array($config) OR count($config) == 0) { 
   if ($this->debug === TRUE) { 
    $this->_log("sort_init_param_invaild"); 
   } 
   return FALSE; 
  } 
   
  //初始化成员变量 
  foreach ($config as $key => $val) { 
   if ( isset($this->$key)) { 
    $this->$key = $val; 
   } 
  } 
   
  //调用相应的成员方法完成排序 
  $method = $this->sort . $this->marker; 
  if ( ! method_exists($this, $method)) { 
   if ($this->debug === TRUE) { 
    $this->_log("sort_method_invaild"); 
   } 
   return FALSE; 
  } 
   
  if ( FALSE === ($this->arr = $this->$method($this->arr))) 
   return FALSE; 
  return TRUE; 
 } 
 
 /** 
  * 插入排序 
  *  
  * @param array 
  * @return bool 
  */ 
 private function insert_sort($arr) { 
  //参数判断 
  if ( ! is_array($arr) OR count($arr) == 0) { 
   if ($this->debug === TRUE) { 
    $this->_log("sort_array(insert)_invaild"); 
   } 
   return FALSE; 
  } 
   
  //具体实现 
  $count = count($arr); 
  for ($i = 1; $i < $count; $i++) { 
   $tmp = $arr[$i]; 
   for($j = $i-1; $j >= 0; $j--) {  
    if($arr[$j] > $tmp) { 
     $arr[$j+1] = $arr[$j]; 
     $arr[$j] = $tmp; 
    } 
   } 
  } 
  return $arr; 
 } 
 
 /** 
  * 选择排序 
  *  
  * @param array 
  * @return bool 
  */ 
 private function select_sort($arr) { 
  //参数判断 
  if ( ! is_array($arr) OR count($arr) == 0) { 
   if ($this->debug === TRUE) { 
    $this->_log("sort_array(select)_invaild"); 
   } 
   return FALSE; 
  } 
   
  //具体实现 
  $count = count($arr); 
  for ($i = 0; $i < $count-1; $i++) { 
   $min = $i; 
   for ($j = $i+1; $j < $count; $j++) { 
    if ($arr[$min] > $arr[$j])  $min = $j; 
   } 
   if ($min != $i) { 
    $tmp = $arr[$min]; 
    $arr[$min] = $arr[$i]; 
    $arr[$i] = $tmp; 
   } 
  } 
  return $arr; 
 } 
 
 /** 
  * 冒泡排序 
  *  
  * @param array 
  * @return bool 
  */ 
 private function bubble_sort($arr) { 
  //参数判断 
  if ( ! is_array($arr) OR count($arr) == 0) { 
   if ($this->debug === TRUE) { 
    $this->_log("sort_array(bubble)_invaild"); 
   } 
   return FALSE; 
  } 
   
  //具体实现 
  $count = count($arr); 
  for ($i = 0; $i < $count; $i++) { 
   for ($j = $count-1; $j > $i; $j--) { 
    if ($arr[$j] < $arr[$j-1]) { 
     $tmp = $arr[$j]; 
     $arr[$j] = $arr[$j-1]; 
     $arr[$j-1] = $tmp; 
    } 
   } 
  } 
  return $arr;  
 } 
 
 /** 
  * 快速排序 
  *  
  * @param array 
  * @return bool 
  */ 
 private function quick_sort($arr) { 
  //具体实现 
  if (count($arr) <= 1) return $arr;  
  $key = $arr[0]; 
  $left_arr = array(); 
  $right_arr = array(); 
  for ($i = 1; $i < count($arr); $i++){ 
   if ($arr[$i] <= $key) 
    $left_arr[] = $arr[$i]; 
   else 
    $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); 
 } 
 
 /** 
  * 日志记录 
  */ 
 private function _log($msg) { 
  $msg = 'date[' . date('Y-m-d H:i:s') . '] ' . $msg . 'n'; 
  return @file_put_contents('sort_err.log', $msg, FILE_APPEND); 
 } 

 
/*End of file sort.php*/ 
/*Location htdocs/sort.php */ 
?> 

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章