php 冒泡排序 快速排序 二分查找

来源:互联网 发布:中国出口数据查询 编辑:程序博客网 时间:2024/05/16 09:27
<?php
/*
 *
 * 冒泡排序
 * 
 */
class getNum{
    public $arr=array();
    public function doNum(){
        $arr = $this->arr;
        $temp='';
        $len=count($arr);
        for($i=0;$i<$len;$i++){
            for($j=0;$j<=$i-1;$j++){
                if($arr[$i]<$arr[$j]){
                    $temp = $arr[$j];
                    $arr[$j]=$arr[$i];
                    $arr[$i]=$temp;
                }
            }
        }
        return $arr;
    }
}


/*
 * 快速排序
 * 一般以第一个元素为准 大于这个元素放左边 小于这个元素放右边
 */
class quickNum{
    public function getQuickNum($arr=''){
        $arr_left=array();
        $arr_right=array();
        if(count($arr)<=1){
            return $arr;
        }
        $b=$arr[0];
        for($i=1;$i<count($arr);$i++){
            if($arr[$i]<$b){
                $arr_left[]=$arr[$i];
            }else{
                $arr_right[]=$arr[$i];
            }
        }
        $arr_left=$this->getQuickNum($arr_left);
        $arr_right=$this->getQuickNum($arr_right);
        return array_merge($arr_left,array($b),$arr_right);


    }
}
//$arr=[3,4,7,1,8,2];
//$r=new quickNum();
//
//$res = $r->getQuickNum($arr);
//print_r($res);
/*
 * 二分查找
 * 必须是个有序数组从小大
 * 取数组中间key 从而通过key获取value(中间值) 与要查找的值做对比
 * 如果要查找的值大于中间值 key加1 反之key减1
 * 如果正好相等返回 这个 数组下标
 */
class getValue{
    public function doValue($arr,$bengin,$end,$val){//0 14   13


   if($bengin<=$end){
        $key=floor(($bengin+$end)/2);//9
        if($arr[$key] == $val){
            return $key;
        }elseif ($arr[$key]<$val){//4<5
         return    $this->doValue($arr,$key+1,$end,$val);//4--7
        }else{
            return  $this->doValue($arr,$bengin,$key-1,$val);
        }


    }else{
       return -1;
   }
    }
}


$arr=[1,3,4,5,6,7,8,9,10,11,12,13,14,15,165];


$bengin = 0;
$end=count($arr);
$val=14;
$r=new getValue();
$res = $r->doValue($arr,$bengin,$end,$val);
print_r($res);
阅读全文
0 0
原创粉丝点击