Техника сортировки / поиска в PHP - PullRequest
1 голос
/ 08 сентября 2010

У меня есть массив, скажем, $array = array(2, 1, 8, 3, 6, 0, 10, 10), и я хочу получить второе по величине значение этого массива.Какой метод сортировки / поиска будет наилучшим и как я могу его использовать?

Ответы [ 3 ]

6 голосов
/ 08 сентября 2010

Я бы просто удалил дубликаты из вашего массива (используя array_unique), а затем использовал rsort (который использует Быстрая сортировка ) сSORT_NUMERIC флаг для числовой сортировки от наивысшего к низшему:

$array = array(2, 1, 8, 3, 6, 0, 10, 10);
$unique_array = array_unique($array);
rsort($unique_array, SORT_NUMERIC);
$second_highest = $unique_array[1];  // will be 8

В руководстве по PHP есть сравнение методов сортировки .

3 голосов
/ 08 сентября 2010

вы можете использовать rsort, но он будет выполнять много дополнительных операций, которые не нужны (быстрая сортировка имеет сложность O (logn)).Это может быть намного быстрее, если вы передадите массив только за один проход, как это (O (n)):

$largest=$array[0];
$secondLargest=null; //none present, by default
foreach($array as $value)
  if($value>$largest)
  {
    $secondLargest=$largest;
    $largest=$value;
  }

это будет значительно быстрее на больших массивах, но это хорошо, только еслипервый, второй, возможно, третий по величине элемент.Во всех других случаях было бы более разумно отсортировать массив и динамически взять N-й по величине элемент.

3 голосов
/ 08 сентября 2010

Что-то вроде этого?

$array = array(2, 1, 8, 3, 6, 0, 10, 10);
rsort($array);

echo $array[1]; // 10

эта обратная сортировка массива с последующим выводом второго элемента.

Редактирование : если вам нужно второе по величине уникальное значениепросто добавьте вызов array_unique:

$array = array(2, 1, 8, 3, 6, 0, 10, 10);
$array = array_unique($array);
rsort($array);

echo $array[1]; // 8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...