现在的位置: 首页 > 综合 > 正文

PHP常用算法

2013年09月10日 ⁄ 综合 ⁄ 共 3531字 ⁄ 字号 评论关闭
// 冒泡法

function bubbleSort($array)
{
    !is_array($array) ? '非数组' : '';
    $len = count($array);
    for ($i = 0; $i < $len; $i++) {
        for ($j = $len -1 ; $j > $i; $j--) {
            if ($array[$j] > $array[$j-1]) {
                $temp = $array[$j-1];
                $array[$j-1] = $array[$j];
                $array[$j] = $temp;
                
            }
        }

    }

    return $array;

}



$a = array(1, 5, 2, 7, 15, 12, 70, 100, 60);
print_r(bubbleSort($a));
echo '<br />';

// 二分查找法 假设$array 是从小到大的线性数组
function binSearch($array, $findvalue)
{
    $low = 0;
    $high = count($array) - 1;

    while ($low <= $high) {
        $mid = intval(($low + $high) / 2);
        if ($array[$mid] == $findvalue) {
            return $mid;
        } elseif ($array[$mid] > $findvalue) {
            $high = $mid - 1;
        } else {
            $low = $mid + 1;
        }

    }
    return false;
}

$b = array(1, 2, 3, 4, 56, 70, 121, 300, 500);

echo binSearch($b, 121);
echo '<br />';


// 16进制转10进制 内置函数 hexdec
function hexToDec($H)
{
    $array = array('F' => 15, 'E' => 14, 'D' => 13, 'C' => 12, 'B' => 11, 'A' => 10);
    $len = strlen($H);
    $sum = 0;
    for ($i = 0; $i < $len; $i++) {
        $bit = substr($H, $i, 1);
        if (!is_numeric($bit)) {
            $bit = $array[strtoupper($bit)];
        }
        $e = $len - $i - 1;
        $sum += pow(16, $e) * $bit;

    }
    return $sum;
}

echo hexToDec('ff1');
echo '<br />';

// 选择排序法

function selectSort($array)
{
    !is_array($array) ? '非数组' : '';
    $len = count($array);
    for ($i = 0; $i < $len; $i++) {
        for ($j = $i + 1; $j < $len; $j++) {
            if ($array[$j] > $array[$i]) {
                $temp = $array[$i];
                $array[$i] = $array[$j];
                $array[$j] = $temp;
                
            }
        }

    }

    return $array;

}

$a = array(2,5,1,6,11,8,15,9);

print_r(selectSort($a));

 

//快速排序(数组排序)
function quicksort($array)
{
    if (count($array) <= 1)
        return $array;
    $key = $array[0];
    $left_arr = array();
    $right_arr = array();
    for ($i = 1; $i < count($array); $i++) {
        if ($array[$i] <= $key) {
            $left_arr[] = $array[$i];
        } else {
            $right_arr[] = $array[$i];
        }
    }
    //运用递归
    $left_arr = quicksort($left_arr);
    $right_arr = quicksort($right_arr);
    return array_merge($left_arr, array($key), $right_arr);
}

$a = array(1,3,7,2,5,10,9,21);
print_r(quicksort($a));

 

// 求素数
// 方法一:直接法
$a = 100000;
$array = array();
$array[] = 1;
$array[] = 2;
for ($i = 3; $i <= $a; $i++) {
    $flags = true;
    if($i % 2 == 0 || $i % 3 == 0 || $i % 5 == 0){
        continue;
    }
    for ($j = 2; $j < $i; $j++) {
        if ($i % $j == 0) {
            $flags = false;
            break;
        }  
    }
    if(!$flags){
        continue;
    }
    $array[] = $i;
}
//print_r($array);

// 方法二:优化法
function prime5($MAX)
{
    $data[0] = 2;
    $total = 1;
    for ($i = 3; $i <= $MAX; $i += 2) {
        $sqrt = ceil(sqrt($i));
        $isp = true;
        for ($j = 0; $j < $total && $data[$j] <= $sqrt; $j++) {
            if ($i % $data[$j] === 0) {
                $isp = false;
                break;
            }
        }

        if ($isp) {
            //$total = $total + 1;
            $data[$total] = $i;
            $total = $total + 1;
        }

    }
    return $data;
}
$a = prime5(20000);
print_r($a);

<?php//冒泡排序function maopao_sort($demo){ $num = count($demo); for($i=0;$i<$num;$i++){ for($j=$num-1;$j>$i;$j--){ if($demo[$j]<$demo[$j-1]){ $temp = $demo[$j]; $demo[$j]=$demo[$j-1]; $demo[$j-1]= $temp; } } } return $demo;}//插入排序function charu_sort($demo){   
$num = count($demo);    for($i=1;$i<$num;$i++){        $temp=$demo[$i];        $dqweizhi = $i-1;//记录当前位置        while(($dqweizhi>=0)&&($temp<$demo[$dqweizhi])){            $demo[$dqweizhi+1] = $demo[$dqweizhi];            $dqweizhi--;        }        $demo[$dqweizhi+1]
= $temp;    }    return $demo;}//选择法排序function select_sort($demo){    $num = count($demo);    for($i=0;$i<$num-1;$i++){        $temp=$demo[$i];        $dqweizhi=$i;        for($j=$i+1;$j<$num;$j++){            if($demo[$j]<$temp){                $temp=$demo[$j];               
$dqweizhi=$j;            }        }        $demo[$dqweizhi]=$demo[$i];        $demo[$i]=$temp;    }    return $demo;}//快速排序function quick_sort($demo){$num = count($demo);if($num<=1){    return $demo;}$key=$demo[0];$left_array=array();$right_array=array();for($i=1;$i<$num;$i++){   
if($demo[$i]<=$key){        $left_array[]=$demo[$i];    }else{        $right_array[]=$demo[$i];    }}$left_array =quick_sort($left_array);$right_array=quick_sort($right_array);return array_merge($left_array,array($key),$right_array);}$test = array('43','154','3','78','13','284','167','2','56','2234','121','57','345');$sss
= quick_sort($test);var_dump($sss);?> 



抱歉!评论已关闭.