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

本文介绍了两种排序算法(冒泡排序和快速排序)及一种二分查找算法的实现。冒泡排序通过不断比较相邻元素并交换位置来排序;快速排序采用分而治之策略,选择基准值将数组分为两部分进行递归排序;二分查找则适用于已排序数组,通过不断缩小搜索范围提高查找效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<?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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值