Re: Покритикуйте лисапед
От: vadimcher  
Дата: 01.10.09 17:34
Оценка: 1 (1) +5
Здравствуйте, slava_phirsov, Вы писали:

_>Доброго времени суток всем читающим! Дали мне в одной фирме тестовое задание:



_>

_>Есть файл, который может содержать 32768 целых, неповторяющихся чисел в диапазоне от 1 до 32768. Числа в файле расположены случайным образом. Написать программу, осуществляющую сортировку данного файла, результатом которой будет файл с отсортированными по возрастанию числами. Для осуществления сортировки разрешено использовать максимально 4Кб оперативной памяти.


_>...и все это должно быть написано на С (не путать с C++) и работать под Linux. В общем, переизобрести GNU "sort -n". Ладно, я, покурив, сочинил овнокод, отослал, никакого ответа, ессно — как модно нынче стало выражаться, "слив засчитан". Но все равно интересно, чтобы коллеги посмотрели со стороны и высказали замечания — на будущее.


_>Собственно, вот оно:

_>
_>...
_>


Я так думаю, что они все еще изучают твой очень длинный-длинный код...
А нельзя было сделать так: выделить 4Кб памяти, по биту на каждое возможное значение, далее пробежать по файлу и отметить те значения, которые там встретились, а дальше просто пробежать по 4Кб памяти и вывести те числа, которые в файле были:
char iwasthere[32768 / 8] = {}; // 4Кб
while (ifil >> num)
    iwasthere[num / 8] |= (1 << (num % 8));
for (int i = 0; i < 32768; ++i)
    if (iwasthere[i / 8] & (1 << (i % 8)))
        ofil << i << endl;

Как-то так...

А вот зайца кому, зайца-выбегайца?!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.