Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2010, 02:02   #1
Kn793
Форумчанин
 
Регистрация: 20.06.2008
Сообщений: 125
По умолчанию QuickSort на столько быстро, на сколько это возможно

В общем смысл в том, что поспорили мы с другом: кто напишет более быструю QSort, я на плюсах, или он на ассемблере.
Будет входной файл - 150мб интов, это около 10 000 000 элементов. Нужно считать, отсортировать, вывести.
Понятно что 95% времени - просто работа с файлом.
Вот пока до чего додумался:
  • Считывать не по одному инту, а сразу считать весь файл в буффер
  • Не использовать стандартную функцию разбора строки - написать свою конкретно под инты, разделённые пробелом
  • Поставить флаги компилятора на максимальную оптимизацию, и отключеник эксепшенов
  • Никакой рекурсии в сортировке.
  • Возможно заюзать комбинацию из сортировок: сначала quick, как меньше 50 - merge< меньше 10 - пузырёк
Что еще подскажите?
Kn793 вне форума Ответить с цитированием
Старый 10.04.2010, 03:23   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

не думаю, что для внешней сортировки квик сорт оптимален. хотя тут так или иначе все сведется к слиянию, если делать по нормальному
Цитата:
QuickSort на столько быстро, на сколько это возможно
Цитата:
Возможно заюзать комбинацию из сортировок: сначала quick, как меньше 50 - merge< меньше 10 - пузырёк
я что-то не понимаю видимо...

Цитата:
Считывать не по одному инту, а сразу считать весь файл в буффер
)) ну если цель именно в проверке скорости квиксорта, то можно и так. тогда советую использовать проецируемые в память файлы (я уже не удивляюсь, что на этом форуме не указывают ОС, постфактум винда..)

Цитата:
Не использовать стандартную функцию разбора строки - написать свою конкретно под инты, разделённые пробелом
fscanf(f, "%d%c", ...) ?
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 10.04.2010 в 03:40.
pproger вне форума Ответить с цитированием
Старый 10.04.2010, 09:28   #3
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Вы вроде бы соревнуетесь в быстродействии qsort, а предложения у вас только относительно каких-то второстепенных элементов программы. Лучше-бы подумали, как реализовать максимально эффективно алгоритм самой сортировки, например определитесь с выбором опорного элемента на каждом шагу, почитайте про лучший и худший случаи. Ну и если скорость является главным критерием работы программы, стоит отказаться от объектов библиотеки C++ (к которой относятся cin, cout, fstream и т.п.) и пользоваться библиотечными функциями C
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Это возможно? Shaitan63 Общие вопросы Delphi 24 01.05.2008 22:59
Возможно ли это...? jungo Microsoft Office Excel 7 20.11.2007 00:01
TStringGrid - изначально мы видим одну ячейку в конце должно быть столько сколько заполнили. Ensoph Компоненты Delphi 5 18.10.2007 22:24