Вид основания реализован в C++

В то время как определение может варьироваться, "единица" является автономной частью кода.

Обычно, это - единый класс.

Однако немного классов существуют в изоляции. Так, часто необходимо копировать классы, которые сотрудничают с классом под тестом.

Поэтому "единица" (также названный "приспособлением") является единственной тестируемой вещью - обычно класс плюс макеты для сотрудников.

можно легко протестировать пакет связанных классов с помощью технологии модульного теста. Мы делаем это все время. Существуют немногие или никакие насмешки в этих приспособлениях.

На самом деле, можно протестировать целые программы автономного приложения как единственные "единицы". Мы делаем это, также. При обеспечении фиксированного набора вводов и выводов, чтобы быть уверенным полное приложение делает вещи правильно.

8
задан Sneftel 19 March 2017 в 14:47
поделиться

2 ответа

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

Фактически, вы даже можете сделать это рекурсивно :

// 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) , и ваш массив должен быть отсортировано.

11
ответ дан 5 December 2019 в 13:00
поделиться

Поскольку ваши значения находятся в диапазоне от 0 до 1 000 000

Вы можете создать массив int размером 1 000 001 и сделать все за два передает

Инициализирует второй массив со всеми нулями.

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

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

0
ответ дан 5 December 2019 в 13:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: