Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/144: Рейтинг темы: голосов - 144, средняя оценка - 4.92
 Аватар для OVERPOWER8
19 / 19 / 2
Регистрация: 29.11.2009
Сообщений: 224

САМАЯ БЫСТРАЯ сортировка!

22.01.2010, 00:29. Показов 28984. Ответов 59
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Теоретически и практически доказано, что сортировка OVERPOWER8 - самая быстрая в мире.

Характеристика:
Требуется памяти: 3*N
Количество шагов в любом случае: 3*N
Стабильная: ДА
Метод: Замена

Если не верите, то можете проверить:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
#include <stdlib.h>
using namespace std;
 
const int SIZE=2000000;
 
void sort(int arr[])
{
    int max=arr[0];
    
    int i;
    
    for(i=0; i<SIZE; i++)
        if(arr[i] > max)
            max = arr[i];
    
    int* Sorted = new int[max+1];
    
    for(i=0; i<SIZE; i++)
        Sorted[arr[i]]+=1;
    
    int counter=0;
    
    for(i=0; i<=max; i++)
        while(Sorted[i])
        {
            arr[counter++]=i;
            Sorted[i]--;
        }
        
    delete [] Sorted;
}
 
int main()
{
    srand(time(0));
 
    int Max=2000000;
    
    int i, j;
    
    int array[SIZE];
    
    for(i=0; i<SIZE; i++)
        array[i]=rand()%Max+1;
        
    sort(array);
    
    cout << "Sorted!\n";
    
    /*
    for(i=0; i<SIZE; i++)
        cout << array[i] << " ";
    */
    
    return 0;
}
P. S. при использовании элементов более 2000000, требуется использовать другой тип данных, например, uint64_t.

Не знаю, почему codepad.org выдает Segmentation Fault,
у меня на Linux G++ все работает замечательно.
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.01.2010, 00:29
Ответы с готовыми решениями:

Самая быстрая сортировка
Какая на данный момент самая быстрая сортировка?

Какая библиотека самая быстрая для вычисления md5 и sha1?
Здравствуйте, подскажите пожалуйста, какая lib самая быстрая для вычислений md5 и sha1? использую hashlibpp но пока что скорость не радует.

Быстрая сортировка(сортировка Хоара). Отсортировать фрагмент массива
Мне нужно отсортировать фрагмент массива, расположенный между первым и последним отрицательным элементом. Немогу понять как устоновить...

59
depict1
 Аватар для zim22
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
22.01.2010, 15:26
Студворк — интернет-сервис помощи студентам
вики
Алгоритмы сортировки, использующие только абстрактную операцию сравнения ключей всегда нуждаются по меньшей мере в O(n log n) сравнениях
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
22.01.2010, 15:28
OVERPOWER8:
Если ты гений помоги мне разобрать с библиотекой декодирования MPEG-2 видео.
0
 Аватар для OVERPOWER8
19 / 19 / 2
Регистрация: 29.11.2009
Сообщений: 224
22.01.2010, 15:31  [ТС]
>> zim22

А где вы увидели у меня "абстрактную операцию сравнения ключей"?
Такое впечатление, будто вы мой код даже не видели!

>> Genius Ignat

Нет, вот уж сам разбирайся.
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
22.01.2010, 15:34
OVERPOWER8:
Ты действительно хочешь мне помочь?
0
 Аватар для OVERPOWER8
19 / 19 / 2
Регистрация: 29.11.2009
Сообщений: 224
22.01.2010, 15:36  [ТС]
>> zim22

Ну так что? Теперь по другому смотрите на мою сортировку?
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
22.01.2010, 15:37
OVERPOWER8:
Я вспылил на счет MPEG-2.
Тебе лучше этого не видеть.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
22.01.2010, 16:29
Цитата Сообщение от OVERPOWER8 Посмотреть сообщение
А что не нравится?
По-моему тебе довольно внятно объяснили, что при сортировке маасива из двух элементов { 1, 1000000 } у тебя будет цикл на миллион итераций

Цитата Сообщение от OVERPOWER8 Посмотреть сообщение
Такое впечатление, будто вы мой код даже не видели!
Такое впечатление, что ты совершенно не читаешь, что тебе пишут
0
depict1
 Аватар для zim22
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
22.01.2010, 16:47
Цитата Сообщение от OVERPOWER8 Посмотреть сообщение
А где вы увидели у меня "абстрактную операцию сравнения ключей"?
на то она и астрактная операция, что под ней подразумевается любой способ, применив который, можно выяснить является ли один ключ меньше другого.
вот один раз увидел:
Цитата Сообщение от OVERPOWER8 Посмотреть сообщение
if(arr[i] > max)
max = arr[i];
а вот второй раз:
Цитата Сообщение от OVERPOWER8 Посмотреть сообщение
while(Sorted[i])
{
arr[counter++]=i;
Sorted[i]--;
}
Цитата Сообщение от OVERPOWER8 Посмотреть сообщение
Ну так что? Теперь по другому смотрите на мою сортировку?
я на неё вообще никак не смотрю. это кривой велосипед. всё уже сделано до тебя. есть уйма сортировок для которых определены их характеристики. я уж лучше их буду использовать, чем твою
0
 Аватар для OVERPOWER8
19 / 19 / 2
Регистрация: 29.11.2009
Сообщений: 224
22.01.2010, 17:10  [ТС]
>> zim22

Ну как хотите.

А я уже составил алгоритм анализа, когда использовать мою сортировку:
1. Элементов больше, чем 10 000 000 (иначе ненамного быстрее, чем qsort)
2. все элементы >= 0
3. Макс. элемент такой, чтобы хватило памяти для динам. массива такого размера,
и желательно, чтобы он был меньше, чем N*log(N).

Иначе использовать STL -> qsort.

Вот несколько сравнительных запусков (показано время в с.):
STL -> qsort: 110 39 19 3 3
Power_sort: 44 16 7 8 3

Следствие: если элементов меньше, чем 10.000.000, то моя сортировка не особо выигрывает перед qsort. Однако памяти расходуется приблизительно одинакого.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
22.01.2010, 17:13
Цитата Сообщение от OVERPOWER8 Посмотреть сообщение
А я уже составил алгоритм анализа, когда использовать мою сортировку:
1. Элементов больше, чем 10 000 000 (иначе ненамного быстрее, чем qsort)
2. все элементы >= 0
3. Макс. элемент такой, чтобы хватило памяти для динам. массива такого размера,
и желательно, чтобы он был меньше, чем N*log(N).
А теперь придумай случай, где РЕАЛЬНО нужна сортировка с такими ограничениями?
0
 Аватар для OVERPOWER8
19 / 19 / 2
Регистрация: 29.11.2009
Сообщений: 224
22.01.2010, 17:40  [ТС]
>> Evg
А теперь придумай случай, где РЕАЛЬНО нужна сортировка с такими ограничениями?
Да полно, даже перечислять не стану!

Вы бы лучше посмотрели на время!
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
22.01.2010, 17:48
Цитата Сообщение от OVERPOWER8 Посмотреть сообщение
Вы бы лучше посмотрели на время!
Что нам дает это время, если область применения этой сортировки очень и очень ограничена?
То что можно будет кому-нибудь пустить пыль в глаза?
Сортировка в таком виде никому не будет нужна.

Где мы будем эту сортировку использовать?
0
 Аватар для OVERPOWER8
19 / 19 / 2
Регистрация: 29.11.2009
Сообщений: 224
22.01.2010, 17:53  [ТС]
Имеется 400.000.000 человек с возрастами: 20 ... 70 лет.
Надо их отсортировать по возрастам.

Моя сортировка займет 10 секунд + 1 секунда - анализ.
STL -> qsort: 140 секунд. (т. е. более чем в 10! раз дольше!)
0
depict1
 Аватар для zim22
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
22.01.2010, 17:54
Цитата Сообщение от OVERPOWER8 Посмотреть сообщение
Вы бы лучше посмотрели на время!
твоя сортировка сортирует всё-что угодно или только типы int?
Цитата Сообщение от OVERPOWER8 Посмотреть сообщение
STL -> qsort: 140 секунд.
так stl или qsort?
0
 Аватар для OVERPOWER8
19 / 19 / 2
Регистрация: 29.11.2009
Сообщений: 224
22.01.2010, 18:37  [ТС]
>> zim22

твоя сортировка сортирует всё-что угодно или только типы int?
Ну вообще-то может сортировать все что угодно - классы, структуры и т. д. Для этого надо дописать, чтобы создавал динамический массив определенных обэектов, и функцию, которая возвращает значение какого-либо члена объекта.

Можно, конечно, сделать, только пока что нет надобности и желания.

так stl или qsort?
Обобщенный алгоритм qsort из стандартной библиотеки stl (не знаю, как остальные, но я отношу cstdlib к stl)
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
22.01.2010, 18:39
Где мы будем эту сортировку использовать?
Вести перепись населения планеты: упорядочивать данные о людях всей планеты.
0
 Аватар для OVERPOWER8
19 / 19 / 2
Регистрация: 29.11.2009
Сообщений: 224
22.01.2010, 18:44  [ТС]
>> Genius Ignat

Пока что не сталкивался с необходимостью такой сортировки.
Но вот если столкнусь (ну не знаю, может быть! при программировании какой-нибудь игры)
Не надо будет ничего изобретать.
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
22.01.2010, 21:11
Ввиду того что автор не может разобраться с работоспособностью собственного кода продолжение данной темы считаю бессмысленным.

Добавлено через 46 минут
Ввиду новых уточнений тему открываю.

Добавлено через 9 минут
Рекомендую ознакомиться с алгоритмом http://ru.wikipedia.org/wiki/Сортировка_подсчётом
Похоже это и есть алгоритм, который пытается изобрести OVERPOWER8
0
 Аватар для HIMen
4340 / 1509 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
22.01.2010, 21:40
этот алгоритм уже давно придуман и называется он сортировка подсчетом
которая во-первых требует памяти O(MAX),
во-вторых нестабильна (ты хоть гуглил что значит устойчивая сортировка)
в-третьих она основана вовсе не на замене (капитан очевидность недоумевает, где там замена)

Что-то мне подсказывает ты проводил тесты на массивах типа
C#
1
2
Random rnd = new Random(DateTime.Now.Millisecond);
int[] msv = (new int[2000000]).Select(n => rnd.Next(0, 10)).ToArray();
А ты попробуй такой
C#
1
2
3
Random rnd = new Random(DateTime.Now.Millisecond);
int[] msv = (new int[2000000]).Select(n => rnd.Next(0, 10)).ToArray();
msv[4] = int.MaxValue;
или такой
C#
1
int[] msv = { 0, int.MaxValue };
Любой из алгоритмов быстрая/пирамидальная/слиянием или подобный будет гораздо быстрее, а т.к твоя реализация еще и криворукая ты получишь либо StackOverflow либо OutOfMemory

Даже хорошая реализация (которая стабильна) не делает эту сортировку достойной: она сортирует только дискретные величины

Не по теме:

Надеюсь код на c# тебе понятен



Добавлено через 4 минуты
Цитата Сообщение от OVERPOWER8 Посмотреть сообщение
Ну вообще-то может сортировать все что угодно - классы, структуры и т. д.
2
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
22.01.2010, 22:10
Жестко
Так вроде тему закрывали.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.01.2010, 22:10
Помогаю со студенческими работами здесь

Быстрая сортировка (сортировка Хоара) для связных списков
есть у кого готовый алгоритм? или подскажите как реализовать

Сортировка Слиянием vs Быстрая Сортировка - что лучше
Народ, помогите разобраться какой из методов сортировки лучше &quot;Сортировка Слиянием&quot; или &quot;Быстрая Сортировка&quot;: у быстрой...

C/C++ FAQ :: Быстрая сортировка (сортировка Хоара)
Вопрос, скорее академический, по мотивам реализации. Вот в faq приведена реализация этого метода сортировки на C++. В коде есть следующий...

Быстрая сортировка (сортировка методом Хоара)
Ввести массив x1,x2,...,x20 в диапазоне . Требуется расположить отрицательные элементы в порядке убывания. Вывести массивы до и после...

Сортировка Хоара / Быстрая сортировка
Доброго времени суток. Написал реализацию алгоритма быстрой сортировки. void SortHhoar(int *arr,int f,int l)//Хоара { int mid = (f...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Закрытая тема Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru