自己整理的知识点 “算法排序和查找”

<?php 
/*
@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;
    }


}


 ?>

猜你喜欢

转载自blog.csdn.net/nange_bok/article/details/78658268