<?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);
/*
*
* 冒泡排序
*
*/
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);