找不到数组中最大的2个元素而不使用php中的任何内置函数

时间:2015-02-18 07:18:23

标签: php

我昨天在测试中被问到这个问题,最后我使用了计数排序。我失败了因为它使用了许多for循环并且它不止一次迭代数组。 任何人都可以帮忙......

3 个答案:

答案 0 :(得分:0)

它给了我最大的元素

  $array=array(2,3,11,6,4,7);  
  $max=$array[0];  
   foreach($array as $d)  
  {  
  if($d > $max){  
      $max=$d;  
      }   
  }  
  echo $max;

答案 1 :(得分:0)

编辑:这是修改删除我最初使用的arsort(),正如所指出的那样,它是一个本机PHP函数。此脚本将考虑未知值的随机订单,这意味着您可以按任意顺序将$a指定为任意数字范围,并且仍会占据前2位。

// create array
$a      =   range(1,20);
// Shuffle so it's random order
shuffle($a);
// Start at 0 for each comparison
$val1   =   0;
$val2   =   0;
// loop through
foreach($a as $values) {
        // If current $values is greater than at least
        // one of the stored $val1 & $val2
        if(($values > $val1) || ($values > $val2)) {
                // Check which is greater of two stored
                if($val1 > $val2)
                    // Assign val2 if val1 is greater
                    // You need to replace the smaller
                    // of the two values
                    $val2   =   $values;
                else
                    // Opposite of above
                    $val1   =   $values;
            }
    }

// voila! reveal top 2
var_dump($val1,$val2);

这将为您提供20 1919 20,具体取决于随机数组的顺序。

答案 2 :(得分:-1)

$data = array(1,9,23,7,6,10,12,111);
$x1 = $data[0];
$x2 = $data[1];

for ($i = 2; $i < count($data); $i++)
    {
        if ($data[$i] > $x2 && $x2 < $x1) {
            $x2 = $data[$i];
        } elseif ($data[$i] > $x1 && $x1 < $x2) {
            $x1 = $data[$i];
        }
    }
var_dump($x1, $x2);