1.冒泡排序
function arrSort(array $arr){ $flage=true; for($i=1,$length=count($arr);$i<=$length&&$flage;$i++){ $flage=false; for($j=0;$j<$length-$i;$j++){ $k=$j+1; if($arr[$j]<$arr[$k]){ $temp=$arr[$k]; $arr[$k]=$arr[$j]; $arr[$j]=$temp; $flage=true; } } } return $arr; }
2.插入排序
function insert_srot(array $arr){ $length=count($arr); //确定插入的次数 for($i=0;$i<$length;$i++){ //将当前待比较元素取出 $temp=$arr[$i]; //假设元素是排好序的 $flage=true; //带比较元素和前面的数相比较,>排到后面 for($j=$i-1;$j>=0;$j--){ if($temp<$arr[$j]){ $arr[$j+1]=$arr[$j]; //$arr[$j]=$temp;//如果大于则交换位置 $flage=false;//假设错误 }else{//只要发现$a[j]<$temp,就认为$arr[$j]的位置是对的,不在比较,减少循环次数 break; } // echo "$i : $j "; // print_arr($arr); } if($flage==false){//如果是无序的,在这里交换位置,只需交换一次,和最后一个比$temp大的 $arr[$j+1]=$temp; } } return $arr; }
3.选择排序
/** * 选择排序法,确保每一轮下来$arr[$i]都是最小的 * @param array $arr 待排序数组 * @return array $arr 排序好的数组 */ function arrSelecteSort(array $arr){ $length=count($arr); $flage=true; for ($i=-1; ++$i<$length;) { $minIndex=$i; for($j=$i;++$j<$length;) { if($arr[$j]<$arr[$minIndex]){//如果后面的数小于第一个数 $minIndex=$j;//$j为最小数的索引 } } if($i != $minIndex){//确定$i为最小数索引 $temp=$arr[$i]; $arr[$i]=$arr[$minIndex ]; $arr[$minIndex]=$temp; } } return $arr; }
4.快速排序
/** * 快速排序法 * @param array $array * @return array $arr */ function quick_sort($array) { //递归出口。数组长度为1的时候直接返回 if(count($array) <= 1) return $array; //选一个基础值,所有的值与该值比较大小,分成2个数组 $key = $array[0]; $left = $right=[]; for($i = 1; $i < count($array); $i++) { if($array[$i] <= $key) { $left[] = $array[$i]; } else { $right[] = $array[$i]; } } //再将左右2遍数组继续分割 $left = quick_sort($left); $right = quick_sort($right); // print_arr(array_merge($left, array($key), $right)); // 合并数组 return array_merge($left, array($key), $right); }