php 经典算法

来源:互联网 发布:太阳能发电 知乎 编辑:程序博客网 时间:2024/05/17 22:32

1,冒泡排序

$array = array(1,4,22,54,23,24,4,123,1,33);        $num = count($array);        for ($i=0;$i<$num;$i++){            for ($j=0;$j<$num-1;$j++){                if($array[$i] > $array[$j]){ // 降序  升序只需要把条件改为 $array[$i] < $array[$j]即可                    $tmp = $array[$i];                    $array[$i] = $array[$j];                    $array[$j] = $tmp;                }            }        }        print_r($array);exit;

其实原理很简单,就是两个循环,执行顺序相当于 $num 的 $num-1次方,在循环里面排序,如果当前数字小于前一个数字,那么把数组重新赋值即可


2,在一组数中,要求插入一个数,按其原来顺序插入,维护原来排序方式。(这种情况试用与升序或者降序的排序,就是找到数值最近的值,然后赋值,并把当前数组的后面的键名+1)

$in = 2;$arr = array(1,1,1,3,5,7);$n = count($arr);//如果要插入的数已经最大,直接打印if($arr[$n-1] < $in) {  $arr[$n+1] = $in; print_r($arr);  }  $check = 0;//只需要保证添加一次即可for($i=0; $i<$n; $i++) {//找出要插入的位置  if($arr[$i] >= $in && $ckeck == 0){    $t1= $arr[$i];    $arr[$i] = $in;//把后面的数据后移一位    for($j=$i+1; $j<$n+1; $j++) {          $t2 = $arr[$j];          $arr[$j] = $t1;          $t1 = $t2;      }      $ckeck = 1;  }}//打印print_r($arr);die;

3, 在一个数组查找你所需元素(二分查找算法)。原理就是把一个数组从中间区分,然后递归调用自己就可以了

    function find($array, $low, $high, $k){        if ($low <= $high){            $mid = intval(($low+$high)/2);            if ($array[$mid] == $k){                return $mid;            }elseif ($k < $array[$mid]){                return find($array, $low, $mid-1, $k);            }else{                return find($array, $mid+1, $high, $k);            }        }        die('Not have...');    }    //test    $array = array(2,4,3,5);    $n = count($array);    $r = find($array,0,$n,5)






原创粉丝点击