кодесурса
«PHP

Алгоритм поиска и сортировки PHP: счетная сортировка

script1adsense2code
script1adsense3code

Алгоритм поиска и сортировки PHP: упражнение 11 с решением

Напишите программу PHP для сортировки списка элементов, используя сортировку Counting.

Согласно Википедии "В компьютерных науках сортировка подсчета - это алгоритм сортировки коллекции объектов по ключам, которые являются маленькими целыми числами; то есть это алгоритм целочисленной сортировки. Он работает путем подсчета количества объектов, у которых есть каждый отдельный ключ значение и использование арифметики по этим подсчетам для определения позиций каждого значения ключа в выходной последовательности. Время его выполнения линейно по количеству элементов и разности между максимальным и минимальным значениями ключа, поэтому оно подходит только для непосредственного использования в ситуациях, когда изменение в ключах не намного больше, чем количество элементов. Однако оно часто используется в качестве подпрограммы в другом алгоритме сортировки, основанном на сортировке, который может обрабатывать большие ключи более эффективно ».

Алгоритм зацикливается на элементах, вычисляя гистограмму того, сколько раз каждый ключ встречается в коллекции входных данных. Затем он выполняет вычисление суммы префикса (второй цикл по диапазону возможных ключей), чтобы определить для каждого ключа начальную позицию в выходном массиве элементов, имеющих этот ключ. Наконец, он снова зацикливается на элементах, перемещая каждый элемент в его отсортированную позицию в выходном массиве.

Пример решения:

PHP-код:

<?php
 function counting_sort($my_array, $min, $max)
{
  $count = array();
  for($i = $min; $i <= $max; $i++)
  {
    $count[$i] = 0;
  }
 
  foreach($my_array as $number)
  {
    $count[$number]++; 
  }
  $z = 0;
  for($i = $min; $i <= $max; $i++) {
    while( $count[$i]-- > 0 ) {
      $my_array[$z++] = $i;
    }
  }
  return $my_array;
}
$test_array = array(3, 0, 2, 5, -1, 4, 1);
echo "Original Array :\n";
echo implode(', ',$test_array );
echo "\nSorted Array\n:";
echo implode(', ',counting_sort($test_array, -1, 5)). PHP_EOL;
?>

Пример вывода:

 Оригинальный массив:                                                    
3, 0, 2, 5, -1, 4, 1                                                
Сортированный массив:                                                      
-1, 0, 1, 2, 3, 4, 5    

Блок-схема:

«Блок-схема:

Редактор кода PHP:


Есть другой способ решить это решение? Внесите свой код (и комментарии) через Disqus.

Предыдущий: Напишите программу PHP для сортировки списка элементов, используя сортировку Bucket.
Далее: Напишите программу PHP для сортировки списка элементов, используя сортировку Radix.

Каков уровень сложности этого упражнения?

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code