//无聊的冒泡算法
function mySort($list, $type = "sort") {
if (is_array($list)) {
if (count($list) >= 1) {
for ($i = 0; $i < count($list); $i++) {
for ($j = 0; $j < count($list) - 1; $j++) {
if ($type == "sort") {
if ($list[$j] > $list[$j + 1]) {
$tmp = $list[$j + 1];
$list[$j + 1] = $list[$j];
$list[$j] = $tmp;
}
} else if ($type == "asort") {
if ($list[$j] < $list[$j + 1]) {
$tmp = $list[$j + 1];
$list[$j + 1] = $list[$j];
$list[$j] = $tmp;
}
}
}
}
}
}
return $list;
}
//$arr = array(8,4,3,6,1,0,2,22,45);
//print_r(mySort($arr));
//echo "<BR><BR>";
//print_r(mySort($arr,"asort"));
//快速排序的实现原理
function quickSort(array $list)
{
// static $i=0;
// $i++;
// echo "<BR>quickSort{$i}<BR>";
// var_dump($list);
// echo "<BR><BR>";
//还是有点不理解,现在从第一次开始进行前移
//第一次传入的是这个数组
//array(1,4,22,5,7,6,9)
//$key值应该是1
//$left = array();
//$right = array(4,22,5,7,6,9);
//开始递归$left()数组
//这个是空数组递归也白递归了
//开始递归$right()数组
//传入的数组为array(4,22,5,7,6,9);
//$key值为4
//$left = array();
//$right = array(22,5,6,9);
//开始递归$left数组
//$left数组为空,没有什么好递归的
//开始递归$rigth数组
//传入的数组为array(22,5,6,9);
//$key = 22;
//$left = array(5,6,9);
//$right = array();
//开始$left
//传入的数组为 array(5,6,9)
//$key = 5;
//$left = array();
//$right = array(6,9);
//开始$right
//传入数组为 array(6,9);
//$key = 6
//$left = array();
//$right = array(9);
//开始$right
//长度为1直接返回9
//return 9;
//需要将$left, $key, $right的值返回
//return array(6,9)
//return array(5,6,9)
//return array($left, $key, $right) array(5,6,9,22)
//retyrn array(4,5,6,9,22)
$len = count($list);
if($len <=1){
return $list;
}
$key = $list[0];
$left = array();
$right = array();
for($i=1; $i<$len; $i++){ //注意这里是从第一个元素开始,已经把取出来的$key值没有计算了
if($list[$i] < $key){
$left[] = $list[$i];
}else{
$right[] = $list[$i];
}
}
$left = quickSort($left);
$right = quickSort($right);
return array_merge($left, array($key),$right);
}
//print '<pre>';
//quickSort(array(1,4,22,5,7,6,9));
////print_r(quickSort(array(1,4,22,5,7,6,9)));
//print '</pre>';
function myQuickSort(array $list)
{
$len = count($list);
if($len <=1){
return $list;
}
$key = $list[0];
$left = array();
$right = array();
for($i=1; $i<$len; $i++){
if($list[$i] < $key){
$left[] = $list[$i];
}else{
$right[] = $list[$i];
}
}
$left = myQuickSort($left);
$right = myQuickSort($right);
//合并三个数组值,$left,$key, $right
//return array_merge($left, array($key), $right);
return array_merge($right, array($key), $left);
}
$list = array(55,23,14,99,84,11,66);
echo "<per>";
print_r(myQuickSort($list));
echo "<per>";