以前绞尽脑汁都看不明白的算法,现在再回头看看,什么感想呢?

/*
@author   nange
@time     2017/11/27
@content  算法排序类 和 查找算法的类
*/


Class Sort{

/*
权限修饰符
public   公共的类内、外都可调用
private 私有的 只能类内调用
protected   受保护的 父类和子类可以调用
*/

/*
@parms   $arr  $array   需要排序的无序的数组
@return  $arr  $array   排序完的有序数组
@content 冒泡排序       时间复杂度O(n²); 空间复杂度O(n²)
@快速排序       时间复杂度O(n*㏒₂ⁿ)
*/

public function BubbleSort($arr)
{
        $len = count($arr);
        //控制循环的层数
            for ($i=1;$i<$len;$i++) {
            //控制循环的次数
                for ($j=0;$j<$len-$i;$j++) {
                //判断
                    if ($arr[$j]<$arr[$j+1]) {
                        list($arr[$j],$arr[$j+1]) = [$arr[$j+1],$arr[$j]];
                    }
                }
            }


        return $arr;
}




/*
@content 快速排序
@parms   $arr  $array   需要排序的无序的数组
@return  $arr  $array   排序完的有序数组
*/
public function QuickSort($arr){
    $len = count($arr);  //数组长度
    if($len <=1){
        return $arr;
    }
    //首先找出一个标杆
    $base = $arr[0];
    //定义两个空数组
    $left = [];
    $right = [];
    for ($i=1;$i<$len;$i++) {
        if ($arr[$i] < $base) {
            $left[] = $arr[$i];
        } else {
            $right[] = $arr[$i];
        }
    }
    $left = $this->QuickSort($left);
    $right = $this->QuickSort($right);
    $arr = array_merge($left,[$base],$right);
    return $arr;
}




/*
@content        选择排序
@params    $arr   array    一个需要排序的无序数组
@return    $arr   array    排序好的数组
*/
public function SelectSort($arr) {
    $len = count($arr);
    for ($i=0;$i<$len-1;$i++) {
        $min = $i;
        for ($j=$i+1;$j<$len;$j++) {
            if($arr[$min] > $arr[$j]) {
                $min = $j;
            }
        }
        if($min != $i) {
            list($arr[$i],$arr[$min]) = [$arr[$min],$arr[$i]];
        }
    }


        return $arr;
}





/*
@content 插入排序
@params  $arr array   有序数组插入一个新元素后的结果
@returnn $arr array  排好序的有序数组
*/
public function InsertSort($arr)
{
    $len = count($arr);
    for ($i=1;$i<$len;$i++) {
        for ($j=$i-1;$j>=0;$j--) {
            if ($arr[$j] > $arr[$j+1]) {
                list($arr[$j+1],$arr[$j]) = [$arr[$j],$arr[$j+1]];
            } else {
                break;
            }
        }
    }


    return $arr;
}




/*
@content        二分查找递归实现方法
@params    $arr   array   $k 一个排序的有序数组 和 要查找的数
@params    $min   int   $k   键值的开始位置
@params    $max   int   $k   键值的结束位置
@return    $target      要查找的数
*/
public function BinaryRecursive($arr,$target,$min,$max)
{
    $half = ceil(($min+$max)/2);
    if ($arr[$half] > $target) {
        return $this->BinaryRecursive($arr,$target,$min,$half-1);
    } elseif ($arr[$half] < $target) {
        return $this->BinaryRecursive($arr,$target,$half+1,$max);
    } else {
        return $half+1;
    }
}





/*
@content        二分查找递归实现方法
@params    $arr   array   $k 一个排序的有序数组 和 要查找的数
@params    $min   int   $k   键值的开始位置
@params    $max   int   $k   键值的结束位置
@return    $target      要查找的数
*/
public function Binary($arr,$target,$min,$max)
{
    while ($min<=$max) {
        $half = ceil(($min+$max)/2);
        if ($arr[$half] > $target) {
            $max = $half-1;
        } elseif ($arr[$half] < $target) {
            $min = $half +1;
        } else {
            return $half;
        }
    }


    return -1;
}

}








Class Homework
{ 

public function Getenum($arr) { 
    $len = count($arr); 
    $data = [];
    if($len == 0 || !$arr){        
        return false;    }      
    $num = 0;     
    for($i=0;$i<$len;$i++){ 
        if($arr[$i]==0) continue;      
             for($j=0;$j<$len;$j++){          
                 for($k=0;$k<$len;$k++){              
                      if($arr[$i]!=$arr[$j] && $arr[$i]!=$arr[$k] && $arr[$j]!=$arr[$k]){               
                          $num++;                
                          if($num%10==0)
                              echo "<br>";               
                              $data[] = $arr[$i].$arr[$j].$arr[$k]."\n";             
                          }          
                      }
                 }    
             }


            return $data;
        }


    }

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值