1.普通冒泡排序
<?php function buddle_sort($a){ $i=0; $j=0; $n= sizeof($a); if($n==0) {return false; }else{ for($i=0;$i<$n;$i++) { for($j=$n-1;$j>$i;$j--) { if($a[$j]>$a[$i]){ $m = $a[$i]; $a[$i]= $a[$j]; $a[$j]= $m; } } } } return $a; } $l = array(20,10,15,4,2,45,11); $R=buddle_sort($l); foreach($R as $value) echo $value,"_"; ?>
2.改进冒泡排序
<?php function buddle_sort($a){ $i=0; $j=0; $n= sizeof($a); if($n==0) {return false; }else{ $flag = true; for($i=$n-1;$i>0 && $flag;$i--) { $flag = false; for($j=0;$j<$i;$j++) { if($a[$j]>$a[$j+1]){ $m = $a[$j+1]; $a[$j+1]= $a[$j]; $a[$j]= $m; $flag = true; } } } } return $a; } $l = array(10,15,20,25,30,31,5); $R=buddle_sort($l); foreach($R as $value) echo $value,"_"; ?>
3.选择排序
<?php function buddle_sort($a){ $i=0; $j=0; $n= sizeof($a); if($n==0) {return false; }else{ for($i=$n-1;$i>0;$i--) { $max = $i; for($j=0;$j<$i;$j++) { if($a[$j]>$a[$max]){ $max = $j; } } if($a[$max] >$a[$i]) { $m = $a[$i]; $a[$i]=$a[$max]; $a[$max] = $m; } } } return $a; } $l = array(10,1,2,5,30,31,6); $R=buddle_sort($l); foreach($R as $value) echo $value,"_"; ?>
4.插入排序
<?php function simple_sort($a){ $l = sizeof($a); if(!$l){ return false; } for($i=1;$i<$l;$i++){ if($a[$i]<$a[$i-1]){ for($j = $i;$j>0;$j--){ if($a[$j]<$a[$i]) { break; } } $v=$a[$i]; for($m=$i;$m>$j+1;$m--) { $a[$m]=$a[$m-1]; } $a[$j+1] =$v; } } return $a; } $s =array(2,13,5,12,6,67,54,12); $R=simple_sort($s); foreach ($R as $value) { echo $value,"_"; }
5.快排1,浪费空间
<?php function quickSort($arr){ if(count($arr)>1){ $k=$arr[0]; $x=array(); $y=array(); $_size=count($arr); for($i=1;$i<$_size;$i++){ if($arr[$i]<=$k){ $x[]=$arr[$i]; }elseif($arr[$i]>$k){ $y[]=$arr[$i]; } } $x=quickSort($x); $y=quickSort($y); return array_merge($x,array($k),$y); }else{ return $arr; } } $a =array(2,1,2,4,12,5,6,8); $r = quickSort($a); var_dump($r); ?>
6.快排2,推荐,在一个数组内实现。
<?php $a = array(2, 1, 5, 3, 6, 4, 8, 9, 1); function partition(&$a, $low, $high) { $pivot = $a[$low]; while($low < $high) { while($low < $high && $a[$high] >= $pivot) { $high--; } $a[$low] = $a[$high]; while($low < $high && $a[$low] <= $pivot) { $low++; } $a[$high] = $a[$low]; } $a[$low] = $pivot; return $low; } function qs(&$a, $low, $high) { if ($low < $high) { $p = partition($a, $low, $high); qs($a, $low, $p-1); qs($a, $p+1, $high); } } qs($a, 0, 8); var_dump($a);
原文:http://www.cnblogs.com/muzidiandian/p/4767672.html