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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2009, 02:43   #1
Rusl92
Форумчанин
 
Аватар для Rusl92
 
Регистрация: 30.03.2008
Сообщений: 392
Плохо самый быстрый метод сортировки, который расположит в порядке возврастания 50.000 чисел типа real

Не могли бы вы сказать самый БЫСТРЫЙ метод сортировки, который расположит в порядке возрастания элементы одномерного массива типа real, максимальное количество элементов 50 тысяч!
какое количество времени эта сортировка займет.

И еще: если бы числа были типа integer, то сортировка намного быстрее бы проходила?

Заранее спасибо!
Программирование - это великое искусство... Такое же как например и живопись!
Rusl92 вне форума Ответить с цитированием
Старый 13.11.2009, 04:10   #2
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Ну вообще, в общем случае быстрее всего работают слияние, QSort, Heapsort - O(n*log(n)). Но если есть какие-то закономерности, то можно попробовать улучшить
С int можно было бы подсчётом, при условии, что диапазон возмохных значений не слишком большой
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 13.11.2009, 07:01   #3
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Метод Шелла дает хорошие результаты... Да Интеджер сортировался бы быстрей, насколько можно проверить опытным путем, здесь математические выкладки не дадут точного результата.
Примеры - http://alglib.sources.ru/sorting/shellsort.php
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 13.11.2009 в 07:34.
Utkin вне форума Ответить с цитированием
Старый 13.11.2009, 11:28   #4
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Я бы советовал использовать быструю, слиянием или пирамидальную. Они и работают быстро, и осваиваються проще некоторых других.
Цитата:
Сообщение от Utkin Посмотреть сообщение
Метод Шелла дает хорошие результаты...
Метод Шелла... Он хуже быстрой.
LeBron вне форума Ответить с цитированием
Старый 13.11.2009, 12:56   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от LeBron Посмотреть сообщение
Метод Шелла... Он хуже быстрой.
Откуда такие данные?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 13.11.2009, 13:10   #6
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Откуда такие данные?
Быстрая сортирока - n*(log(n)). А Шелла хоть и имеет ряд преимуществ, большую стойкость и даже лучше для малого количества элементов, но фактически она имеет асимптотику повыше - начиная с, если не ошибаюсь, n^(1.1(6)), и вверх, в зависимости от реализации.
LeBron вне форума Ответить с цитированием
Старый 13.11.2009, 13:18   #7
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

А мне посоветовал Г. Шилдт . Теория и практика С++
Там речь шла о сравнении сортировки qsort и всех прочих .

Цитата:
Сообщение от LeBron Посмотреть сообщение
и вверх, в зависимости от реализации.
По Вашему в быстрой сортировке от реализации ничего не зависит? Не жульничайте.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 13.11.2009 в 13:40.
Utkin вне форума Ответить с цитированием
Старый 21.11.2009, 20:42   #8
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Методом пузырька такой массив сортируется примерно 20 секунд:
Код:
procedure TForm1.Button1Click(Sender: TObject);
const
max=50000;
var
a:array[1..max] of real;
i,j,t:integer;
begin
randomize;
for i:=1 to max do
begin
a[i]:=random(max*2)+strtofloat('0,'+inttostr(random(max*2)));
end;
t:=gettickcount;
for i:=1 to max-1 do
for j:=max-1 downto i do
if a[i]>a[j+1] then
begin
a[i]:=a[i]+a[j+1];
a[j+1]:=a[i]-a[j+1];
a[i]:=a[i]-a[j+1];
end;
showmessage(inttostr(gettickcount-t));
end;
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 21.11.2009, 20:50   #9
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Цитата:
Сообщение от russian-stalker Посмотреть сообщение
Методом пузырька такой массив сортируется примерно 20 секунд:
Наверно, комп слабый Или оценка времени очень примерная. Должно работать не больше 15, думаю, примерно 10 секунд. Для 15 тысяч сортировка пузырьком укладываеться в секунду (мой "олимпиадный опыт"), так что, раз она квадратическая, то необходимо не больше (3.(3))^2, тоесть 11 с небольшим секунд.
LeBron вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Самый быстрый вид сортировки массива Warnes Свободное общение 42 06.12.2009 16:02
Операции с разными типами чисел (real c integer не умножается!) uvamosk Помощь студентам 10 21.05.2009 21:14
Какой самый быстрый метод заполнения массива, например двухмерного? SkAndrew Общие вопросы Delphi 11 29.05.2008 13:23
Предложите самый быстрый алгоритм! Gambler Общие вопросы Delphi 6 26.12.2006 22:44