Здравствуйте, 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;
Как-то так...