随意

$a = array(2,3,4,6,7,8,87);



function pao($a){
    $len = count($a);

    for($i =1;$i<$len;$i++){
        for($j=0;$j<$len-$i;$j++){
            if($a[$j] < $a[$j+1]){
                $b = $a[$j+1];
                $a[$j+1] = $a[$j];
                $a[$j] = $b;
            }
        }
    }
    return $a;
}

print_r(pao($a));
function kuai($a){
    $len = count($a);
    if($len <= 1) {
        return $a;
    }
    $base = $a[0];
    $left = array();
    $right = array();
    for($i=1;$i<$len;$i++){
        if($a[$i] < $base){
            $left[] = $a[$i];
        }else{
            $right[] = $a[$i];
        }
    }
    $left = kuai($left);
    $right = kuai($right);
    return array_merge($left,array($base),$right);
}

function select ($a) {
    $len = count($a);
    for($i=0;$i<$len;$i++){
        $p = $i;
        for($j=$i+1;$j<$len;$j++){
            if($a[$p] < $a[$j]){
                $p = $j;
            }
        }
        if($p != $i){
            $temp = $a[$i];
            $a[$i] = $a[$p];
            $a[$p] = $temp;
        }
    }
    return $a;
}


function insert ($a) {
    $len = count($a);
    for($i=1;$i<$len;$i++){
        $temp = $a[$i];
        for($j=$i-1;$j>=0;$j--){
            if($a[$j]>$temp){
                $a[$j+1] = $a[$j];
                $a[$j] = $temp;
            }else{
                break;
            }
        }
    }
    return $a;
}




function al_merge($arrA, $arrB)
{

    $arrC = array();
    while (count($arrA) && count($arrB)) {
        //这里不断的判断哪个值小,就将小的值给到arrC,但是到最后肯定要剩下几个值,
        //不是剩下arrA里面的就是剩下arrB里面的而且这几个有序的值,肯定比arrC里面所有的值都大所以使用
        $arrC[] = $arrA['0'] < $arrB['0'] ? array_shift($arrA) : array_shift($arrB);
    }

    return array_merge($arrC, $arrA, $arrB);
}

//归并排序主程序
function al_merge_sort($arr)
{
    $len = count($arr);
    if ($len <= 1)
        return $arr;//递归结束条件,到达这步的时候,数组就只剩下一个元素了,也就是分离了数组
    $mid = intval($len / 2);//取数组中间
    $left_arr = array_slice($arr, 0, $mid);//拆分数组0-mid这部分给左边left_arr
    $right_arr = array_slice($arr, $mid);//拆分数组mid-末尾这部分给右边right_arr
    $left_arr = al_merge_sort($left_arr);//左边拆分完后开始递归合并往上走
    $right_arr = al_merge_sort($right_arr);//右边拆分完毕开始递归往上走
    $arr = al_merge($left_arr, $right_arr);//合并两个数组,继续递归
    return $arr;
}


function find ($a,$find,$min,$max){
    if($min <=$max){
        $mid = intval(($min+$max)/2);
        if($a[$mid]==$find){
           return $mid;
        }elseif($a[$mid] < $find){
            return find($a,$find,$mid+1,$max);
        }else{
            return find($a,$find,$min,$mid-1);
        }
    }
    return false;
}

$a = al_merge_sort($a);
$min = min(array_keys($a));
$max = max(array_keys($a));
var_dump(find($a,'87',$min,$max));

  

posted @ 2017-04-24 08:33  |小赵同学|  阅读(142)  评论(0编辑  收藏  举报