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.基数排序


summerNazi
19 声望3 粉丝

bug


« 上一篇
数据结构
下一篇 »
进程线程协程