• 随意


    $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));
    

      

  • 相关阅读:
    顺序查找
    折半查找
    KMP
    php长时间的脚本,报502
    AcWing 27. 数值的整数次方
    acwing 25. 剪绳子
    Best Cow Line <挑战程序设计竞赛> 习题 poj 3617
    acwing 23. 矩阵中的路径
    AcWing 34. 链表中环的入口结点
    AcWing 33. 链表中倒数第k个节点
  • 原文地址:https://www.cnblogs.com/druids/p/6755077.html
Copyright © 2020-2023  润新知