//无聊的冒泡算法 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>";