越简单越好!

PHP几种排序算法

发表于 2009-08-18 13:41 | 1178次阅读 0次点赞   PHP

class bevin{
public $public = 'public';
private $private = 'private';
protected $protected = 'protected';
//final $final = 'final';
static $static = 'static';

function __construct(){
   $this->protected = 'change private';
}

public function setValue($a){
   self::$static = $a;
} 

public function getValue(){
   echo $this->private;
}

function __destruct(){
   echo 'asdfsadf';
}
}

class paixu {

// 基本排序
public function t_sortArray($array) {
   if(is_array($array) && count($array)>1) {
    for($i=0; $i<count($array); $i++) {
     for($j=($i+1); $j<count($array); $j++) {
      $temp = $array[$i];
      if($array[$j]<$array[$i]) {
       $array[$i] = $array[$j];
       $array[$j] = $temp;
      }
     }
    }
    return $array;
   } else {
    return $array;
   }
}

// 冒泡排序
public function c_sortArray($array) {
   if(!is_array($array) || count($array)<=1){ return $array; }
   $status = false;
   foreach($array as $key=>$v) {
    if($key>0) {
     if($array[$key-1]>$array[$key]) {
      $array[$key] = $array[$key-1];
      $array[$key-1] = $v;
      $status = true;
     }
    }
   }
   if($status) {
    return $this->c_sortArray($array);
   } else {
    return $array;
   }
}

// 快速排序
public function v_sortArray($array) {
   if(!is_array($array) || count($array)<=1){ return $array; }
   if(count($array)>2) {
    $m = $array[floor(count($array)/2)+1];
   } else {
    if($array[0]>$array[1]) {
     $temp = $array[0];
     $array[0] = $array[1];
     $array[1] = $temp;
    }
    return $array;
   }
   $leftarray = array();
   $rightarray = array();
   foreach($array as $key=>$v) {
    if($v>$m) {
     $rightarray[] = $v;
    }
    if($v<$m) {
     $leftarray[] = $v;
    }
    if($v==$m) {
     $mid[] = $v;
    }
   }
  
   $nleftarray = $this->v_sortArray($leftarray);
   $nrightarray = $this->v_sortArray($rightarray);
   return array_merge($nleftarray,$mid,$nrightarray);
}

// 直接插入排序
public function i_sortArray($array) {
   if(!is_array($array) || count($array)<=1){ return $array; }
   $newarray = array($array[0]);
   $temp = 0;
   foreach($array as $k=>$v) {
    if($k>0) {
     if($v>=$newarray[count($newarray)-1]) {
      $newarray[] = $v;
     } else {
      foreach($newarray as $nk=>$nv) {
       if($v<$nv) {
        $temparray = array();
        foreach($newarray as $ck=>$cv) {
         if($ck<$nk) {
          $temparray[$ck] = $cv;
         } elseif($ck==$nk) {
          $temparray[$ck] = $v;
          $temparray[($ck+1)] = $cv;
         } else {
          $temparray[($ck+1)] = $cv;
         }
        }
        $newarray = $temparray;
        break;
       }
      }
     }
    }
   }
   return $newarray;
}
}

$bevin = new paixu;
$array = array(5,4,5,4,4,5,5,5,5,5);

$v = $bevin->t_sortArray($array);
print_r($v);

$v = $bevin->c_sortArray($array);
print_r($v);

$v = $bevin->v_sortArray($array);
print_r($v);

$v = $bevin->i_sortArray($array);
print_r($v);

返回顶部 ^