<?php
$origin=array(9,2,3,1,4,7,6,8,5);
var_dump($origin);echo '</br>';
function BeautifulPrint($origin){
$size = count($origin);
for ($i=0; $i <$size ; $i++) {
echo $origin[$i].' ';
}echo '</br>--------!!!-------</br>';
}
function swap(&$a,&$b){
$tmp=$a;$a=$b;$b=$tmp;
}
function popSort($origin,$order){
$size = count($origin);
for ($i=$size-1; $i >= 0; $i--) {
for ($j=$size-1; $j >=$size-$i ; $j--) {
if($origin[$j]<$origin[$j-1]){
swap($origin[$j],$origin[$j-1]);
}
}
}
return $order?$origin:array_reverse($origin);
}
echo 'PopSort 升序'.'</br>';
$tmp = popSort($origin,true);
BeautifulPrint($tmp);
$tmp = popSort($origin,false);
echo '降序</br>';
BeautifulPrint($tmp);
function quickSort($origin,$order){
do_quickSort($origin,0,count($origin)-1);
return $order?$origin:array_reverse($origin);
}
function partition(&$origin,$low,$high){
$target_value=$origin[$low];
$i=$low;$j=$high;
while($i<$j){
while($i<$j and $origin[$j]>=$target_value)$j--;
if($i<$j){
$origin[$i]=$origin[$j];
$i++;
}
while($i<$j and $origin[$i]<=$target_value)$i++;
if($i<$j){
$origin[$j]=$origin[$i];
$j--;
}
}
$origin[$i] = $target_value;
return $i;
}
function do_quickSort(&$origin,$low,$high){
if($low<$high){
$mid=partition($origin,$low,$high);
do_quickSort($origin,$low,$mid-1);
do_quickSort($origin,$mid+1,$high);
}
}
echo 'QuickSort 升序'.'</br>';
$tmp = quickSort($origin,true);
BeautifulPrint($tmp);
$tmp = quickSort($origin,false);
echo '降序</br>';
BeautifulPrint($tmp);
function shellSort($origin,$order){
$size = count($origin);
$gap=-1;$i=-1;$j=-1;$tmp=-1;
for ($gap=$size/2; $gap>0 ; $gap/=2){
for ($i=$gap; $i < $size ; $i++) {
for ($j=$i-$gap; $j >=0 and $origin[$j]>$origin[$j+$gap] ; $j-=$gap) {
swap($origin[$j],$origin[$i]);
}
}
}
return $order?$origin:array_reverse($origin);
}
echo 'ShellSort 升序'.'</br>';
$tmp = shellSort($origin,true);
BeautifulPrint($tmp);
$tmp = shellSort($origin,false);
echo '降序</br>';
BeautifulPrint($tmp);