您的位置:首页 > 编程语言 > PHP开发

PHP:冒泡排序、快速查找和二分查找的思路以及算法

2016-09-27 16:20 495 查看

冒泡排序

$arr=array(1,43,54,62,21,66,32,78,36,76,39);

/**
* [getPao 就是像冒泡一样,每次从数组当中 冒一个最大的数出来]
* @param  [type] $arr [数组]
* @return [type]      [description]
*/
function getPao($arr){
$len = count($arr);
for($i = 0; $i < $len ; $i++){
for($k = 0; $k < $len -1 ;$k++){
if($arr[$k+1] > $arr[$k]){
$tmp = $arr[$k+1];
$arr[$k+1] = $arr[$k];
$arr[$k] = $tmp;
}
}
}
return $arr;
}


快速查找

/**
* [getQuick 先使用一个固定的值,然后和数组中其他的数值进行对比,比当前小的数组放到一个数组中,比当前大的数组分当道另一个数组中,这两个数组重复前面的方法在进行排序,排好序的两个数组进行合并]
* @param  [type] $arr [description]
* @return [type]      [description]
*/

function getQuick($arr){
$len = count($arr);

if($len <= 1){
return $arr;
}

$num = $arr[0];
$big = array();
$small = array();

foreach($arr as $v){
if($v > $num)
$big[] = $v;  //把比$num大的数放到一个数组里
if($v < $num)
$small[] = $v;   //把比$num小的数放到另一个数组里
}

$big = getQuick($big);
$small = getQuick($small);
return array_merge($big, array($num), $small);
}


二分查找

$arr1 = array(1,2,3,4,5,6,7,8,9,12,23,33,35,56,67,89,99);
/**
* [getCheck 假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。]
* @param  [type] $arr1 [数组]
* @param  [type] $num  [要查找的]
* @return [type]       [description]
*/
function getCheck($arr1,$num){
$len = count($arr1);
$low = 0;
$high = $len -1;
while($low <= $high){
$middle = floor(($low + $high)/2);
if($num == $arr1[$middle]){
return $middle;
}elseif($num < $arr1[$middle]){
$high = $middle -1 ;
}else{
$low = $middle +1 ;
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php 算法
相关文章推荐