1.插入排序
1).直接插入排序
$arr = [16,19,10,17,8,13,6,7,5,12];
$arr = insert_sort($arr);
function insert_sort($arr)
{
$len=count($arr);
for($i=1; $i<$len; $i++) {
$tmp = $arr[$i];
for($j=$i-1; $j>=0; $j--) {
if($tmp < $arr[$j])
{
$arr[$j+1] = $arr[$j];
$arr[$j] = $tmp;
}
}
}
return $arr;
}
2).希尔排序
$arr = [16,19,10,17,8,13,6,7,5,12];
$len = count($arr);
for( $increment = intval($len/2); $increment > 0; $increment = intval($increment/2)){
for($i=$increment; $i<$len; $i++) {
$tmp = $arr[$i];
for( $j = $i; $j>= $increment; $j -= $increment ){
if( $tmp < $arr[ $j-$increment ] ) {
$arr[$j] = $arr[$j - $increment];
}else{
break;
}
}
$arr[$j] = $tmp;
}
}
2.交换排序
1).冒泡排序
$arr = [16,19,10,17,8,13,6,7,5,12];
$len =count($arr);
for ($i=1;$i<$len;$i++){
for ($j=0;$j<$len-$i;$j++){
if($arr[$j]>$arr[$j+1]){
$x =$arr[$j+1];
$arr[$j+1]= $arr[$j];
$arr[$j]= $x;
}
}
}
2).快速排序
$arr = [16,19,10,17,8,13,6,7,5,12];
$arr = quick_sort($arr);
function quick_sort($arr)
{
$len = count($arr);
if($len<=1){
return $arr;
}
$left = $right = [];
for($i=1; $i<$len; $i++)
{
if($arr[$i] < $arr[0]){
$left[]=$arr[$i];
}else{
$right[]=$arr[$i];
}
}
$left =quick_sort($left);
$right=quick_sort($right);
return array_merge($left,array($arr[0]),$right);
}
3.选择排序
1).简单选择排序
$arr = [16,19,10,17,8,13,6,7,5,12];
simplySelectSort($arr);
function simplySelectSort(&$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, $min, $i);
}
}
}
function swap(&$arr,$a,$b){
$temp = $arr[$a];
$arr[$a] = $arr[$b];
$arr[$b] = $temp;
}
2).树形选择排序
3).堆排序
4.归并排序
$arr = [16,19,10,17,8,13,6,7,5,12];
$arr = mergeSort($arr);
function mergeSort($arr)
{
if(count($arr) <= 1){
return $arr;
}
$left = array_slice($arr,0,(int)(count($arr)/2));
$right = array_slice($arr,(int)(count($arr)/2));
$left = mergeSort($left);
$right = mergeSort($right);
$output = merge($left,$right);
return $output;
}
function merge($left,$right){
$result = [];
while(count($left) >0 && count($right) > 0){
if($left[0] <= $right[0]){
array_push($result,array_shift($left));
}else{
array_push($result,array_shift($right));
}
}
array_splice($result,count($result),0,$left);
array_splice($result,count($result),0,$right);
return $result;
}
5.分配排序
6.基数排序
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。