部分排序算法(php版)

来源:互联网 发布:js里的on是什么意思 编辑:程序博客网 时间:2024/05/29 02:50
$arr=array(3,6,5,7,1,8,2,9,10,4);print_r($arr);function swap(&$arr,$i,$j){    $tmp=$arr[$i];    $arr[$i]=$arr[$j];$arr[$j]=$tmp;}//快速排序function quicksort(&$arr,$start,$end){if($start<$end){  $base=$arr[0];  $i=$start;  $j=$end+1;  while(true){    while($i<$end && $arr[++$i]-$base<=0);while($j>$start && $arr[--$j]-$base>=0);if($i<$j){  swap($arr,$i,$j);}else{   break;} swap($arr,$start,$j); quicksort($arr,$start,$j-1); quicksort($arr,$j+1,$end);  } } }//quicksort($arr,0,count($arr)-1);//print_r($arr);//快排2function quickSort2($list) {//1if(count($list)<= 1) {//不需要再继续了return $list;}//2$cankao = $list[0];//3$small = $big = array();for($k=1, $len=count($list); $k<$len; ++$k) {if($list[$k] > $cankao) {            $big[] = $list[$k];} else {     $small[] = $list[$k];}}//4$sort_small = quickSort($small);$sort_big = quickSort($big);//5return array_merge($sort_small, array($cankao), $sort_big);}//插入排序function insertsort(&$arr){  $arrlen=count($arr);  for($i=1;$i<$arrlen;$i++)  {     $tmp=$arr[$i]; if($arr[$i]-$arr[$i-1]<0) {   $j=$i-1;   for(;$j>=0 && $arr[$j]-$tmp>0;$j--)       {      $arr[$j+1]=$arr[$j];       }       $arr[$j+1]=$tmp;    }  }  }//insertsort($arr);//print_r($arr);//折半插入排序function binaryinsertsort(&$arr){   $arrlen=count($arr);   for($i=1;$i<$arrlen;$i++)   {     $tmp=$arr[$i]; $low=0; $high=$i-1; while($low <= $high) {    $mid=(int)(($low+$high)/2);if($tmp-$arr[$mid]>0){  $low=$mid+1;}else{  $high=$mid-1;} } for($j=$i;$j>$low;$j--) {   $arr[$j]=$arr[$j-1]; } $arr[$low]=$tmp;   }}//binaryinsertsort($arr);//print_r($arr);//shell排序 (经测试有误)function shellsort(&$arr){   $arrlen=count($arr);   $h=1;   while($h <= (int)($arrlen/3))   {     $h=$h*3+1;   }   while($h>0)   {for($i=$h;$i<$arrlen;$i++){$tmp=$arr[$i];if($arr[$i]-$arr[$i-$h]>0){  $j=$i-$h;  for(;$j>=0 && $arr[$j]-$tmp>0;$j-=$h)      {        $arr[$j+$h]=$arr[$j];      }  $arr[$j+$h]=$tmp;}}$h=(int)(($h-1)/3);   }  }//shellsort($arr);//print_r($arr);//桶状排序function bucketSort(&$list) {//取得最大值与最小值$max = max($list);$min = min($list);//做桶//分配一个数组,下标从最小值开始,到最大值!//array_fill(起始下标,长度,填充值)$bucket = array_fill($min, $max-$min+1, 0);//遍历待排序的序列,将数量统计到桶foreach($list as $value) {++ $bucket[$value];}//遍历桶,得到所有的数foreach($bucket as $key=>$value) {for($i=1;$i<=$value;++$i) {//echo $key, ' ';$result[] = $key;}}return $result;}//bucketsort($arr);//print_r($arr);

0 0
原创粉丝点击