冒泡排序:
<?php
function bubblesort($arr) { $len=count($arr); for($i=0;$i<$len-1;$i++) { $flag = false; for ($j = $i + 1; $j < $len; $j++) { if ($arr[$i] > $arr[$j]) { swap($arr[$i],$arr[$j]); $flag = true; } } if(!$flag) break; } return $arr; } /*交换两个数*/ function swap(&$a,&$b){ $temp=$a; $a=$b; $b=$temp; }
$arr=array(5,4,3,2,1); print_r(bubblesort($arr));
?>
插入排序:
function inssort(&$arr) { $len=count($arr); //从第2个数开始,默认第一个已排好序 for($i=1;$i<$len;$i++) { $key=$arr[$i]; //将当前要插入数保存。 for($j=$i-1;$j>=0;$j--) //默认插入数前有序,即前i-1都排列有序,此时将插入数跟前面数挨个比较 if($key<$arr[$j]) { $arr[$j+1]=$arr[$j]; //比较后比插入数大的后移一位 $arr[$j]=$key; } } return $arr; }
选择排序:
function selectsort($arr) { $len=count($arr); for($i=0;$i<$len-1;$i++) { $min = $i; for ($j = $i + 1; $j < $len; $j++) { if ($arr[$j] < $arr[$min]) { $min = $j; //只需要修改定位符,不需要交换元素,省去了多次交换 } } if ($min != $i) { swap($arr[$i], $arr[$min]); } } return $arr; } /*交换两个数*/ function swap(&$a,&$b){ $temp=$a; $a=$b; $b=$temp; }
快速排序:
/*占用空间较多的一种方法,但是比较好理解*/ function quicksort(&$arr) { $len=count($arr); if(!is_array($arr)) { return "输入格式错误,请输入数组"; } if($len<=1) return $arr; //数组长度大于1时 $left=array(); $right=array(); $key=$arr[0]; for($i=1;$i<$len;$i++) { if($arr[$i]<=$key) { $left[] = $arr[$i]; } else{ $right[]=$arr[$i]; } } $left=quicksort($left); $right=quicksort($right); return array_merge($left,[$key],$right); }