В то время как определение может варьироваться, "единица" является автономной частью кода.
Обычно, это - единый класс.
Однако немного классов существуют в изоляции. Так, часто необходимо копировать классы, которые сотрудничают с классом под тестом.
Поэтому "единица" (также названный "приспособлением") является единственной тестируемой вещью - обычно класс плюс макеты для сотрудников.
можно легко протестировать пакет связанных классов с помощью технологии модульного теста. Мы делаем это все время. Существуют немногие или никакие насмешки в этих приспособлениях.
На самом деле, можно протестировать целые программы автономного приложения как единственные "единицы". Мы делаем это, также. При обеспечении фиксированного набора вводов и выводов, чтобы быть уверенным полное приложение делает вещи правильно.
Я думаю, вы сильно усложняете свое решение. Вы можете реализовать основание системы счисления, используя единственный массив, полученный во входном массиве, с сегментами на каждом шаге, представленными массивом индексов, которые отмечают начальный индекс каждого сегмента во входном массиве.
Фактически, вы даже можете сделать это рекурсивно :
// Sort 'size' number of integers starting at 'input' according to the 'digit'th digit
// For the parameter 'digit', 0 denotes the least significant digit and increases as significance does
void radixSort(int* input, int size, int digit)
{
if (size == 0)
return;
int[10] buckets; // assuming decimal numbers
// Sort the array in place while keeping track of bucket starting indices.
// If bucket[i] is meant to be empty (no numbers with i at the specified digit),
// then let bucket[i+1] = bucket[i]
for (int i = 0; i < 10; ++i)
{
radixSort(input + buckets[i], buckets[i+1] - buckets[i], digit+1);
}
}
Конечно, buckets [i + 1] - buckets [i]
вызовут переполнение буфера, когда i
равно 9, но я пропустил дополнительную проверку или ради удобства чтения; Надеюсь, вы знаете, как с этим справиться.
После этого вам просто нужно вызвать radixSort (testcases, sizeof (testcases) / sizeof (testcases [0]), 0)
, и ваш массив должен быть отсортировано.
Поскольку ваши значения находятся в диапазоне от 0 до 1 000 000
Вы можете создать массив int размером 1 000 001 и сделать все за два передает
Инициализирует второй массив со всеми нулями.
Выполните проход через ваш входной массив и используйте значение как нижний индекс для увеличения значения во втором массиве.
Как только вы это сделаете, второй проход будет легким. пройдитесь по второму массиву, и каждый элемент сообщает вам, сколько раз число появилось в исходном массиве. Используйте эту информацию для повторного заселения ваш входной массив.