background image

  echo '<br/>';
  }

4、在一组数中,要求插入一个数,按其原来顺序插入,维护原来排序方式。
思路:找到比要插入数大的那个位置,替换,然后把后面的数后移一位。
<?php
$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);
  }

for($i=0; $i<$n; $i++) {
//找出要插入的位置

  if($arr[$i] >= $in){
  $t1= $arr[$i];

  $arr[$i] = $in;
//把后面的数据后移一位

  for($j=$i+1; $j<$n+1; $j++) {
  $t2 = $arr[$j];

  $arr[$j] = $t1;
  $t1 = $t2;

  }
//打印

  print_r($arr);
  die;

  }
}

5、对一组数进行排序(快速排序算法)。
思路:通过一趟排序分成两部分,然后递归对这两部分排序,最后合并。
<?php
function q($array) {

  if (count($array) <= 1) {return $array;}
//以$key 为界,分成两个子数组

  $key = $array[0];
  $l = array();

  $r = array();
//分别进行递归排序,然后合成一个数组

  for ($i=1; $i<count($array); $i++) {
  if ($array[$i] <= $key) { $l[] = $array[$i]; }

  else { $r[] = $array[$i]; }
  }

  $l = q($l);
  $r = q($r);

  return array_merge($l, array($key), $r);
}

$arr = array(1,2,44,3,4,33);
print_r( q($arr) );

6、在一个数组查找你所需元素(二分查找算法)。
思路:以数组中某个值为界,再递归进行查找,直到结束。
<?php

function find($array, $low, $high, $k){
  if ($low <= $high){

  $mid = intval(($low+$high)/2);
  if ($array[$mid] == $k){

  return $mid;
  }elseif ($k < $array[$mid]){