Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "ReadWriter.h"
- //iostream, fstream включены в ReadWriter.h
- using namespace std;
- union NS {
- int number;
- unsigned char digits[4];
- };
- // Функция цифровой сортировки
- void radixSort(int *numbers, int array_size) {
- NS *newNumbers = new NS[array_size];
- for (int i = 0; i < array_size; ++i) {
- newNumbers[i].number = numbers[i];
- }
- unsigned int base = 256;
- unsigned int counter[base];
- for (int i = 0; i < 4; ++i) {
- for (int j = 0; j < base; ++j) {
- counter[j] = 0;
- }
- for (int j = 0; j < array_size; ++j) {
- counter[newNumbers[j].digits[i]]++;
- }
- for (int j = 1; j < base; ++j) {
- counter[j] += counter[j - 1];
- }
- for (int j = array_size - 1; j >= 0; --j) {
- numbers[counter[newNumbers[j].digits[i]] - 1] = newNumbers[j].number;
- counter[newNumbers[j].digits[i]]--;
- }
- for (int j = 0; j < array_size; ++j) {
- newNumbers[j].number = numbers[j];
- }
- }
- delete[] newNumbers;
- }
- //Не удалять и не изменять метод main без крайней необходимости.
- //Необходимо добавить комментарии, если все же пришлось изменить метод main.
- int main() {
- //Объект для работы с файлами
- // std::fstream fout;
- // fout.open("input.txt", std::ios::out);
- // fout << "256" << endl;
- // for (int i = 0; i < 256; ++i) {
- // fout << rand() % 10000 << " ";
- // }
- // fout.close();
- ReadWriter rw;
- int *brr = nullptr;
- int n;
- //Ввод из файла
- n = rw.readInt();
- brr = new int[n];
- rw.readArray(brr, n);
- //Запуск сортировки, ответ в том же массиве (brr)
- radixSort(brr, n);
- //Запись в файл
- rw.writeArray(brr, n);
- //освобождаем память
- delete[] brr;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement