Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/120: Рейтинг темы: голосов - 120, средняя оценка - 4.78
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446

Алгоритмы сортировок

31.03.2009, 20:10. Показов 22022. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Недавно была необходимость сравнить некоторые алгоритмы сортировок... Если кому-нибудь понадобятся... вообщем вот...

Алгоритмы реализованы ввиде функций, с передачей парметров: Массива A и кол-ва элементов массива n

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Метод простого извлечения
void SimpleExtract(int *A, int n)
{
    int i,y;
 
    for(i=n-1; i>0; i--)
    {
        int max=0;
 
        for (int y=1; y<=i; y++)
            {
                if(A[y]>A[max]) max=y;
            }
 
        int temp = A[i];
        A[i] = A[max];
        A[max] = temp;
    }
}
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
// Метод распределения
void Raspredel(int *A, int n)
{
  const int m = 100; // m - число, которое должно быть больше максимального элемента массива A
  int Amount[m];
  int i;
 
  for (i=0; i<m; i++) Amount[i] = 0;
    for (i=0; i<n; i++)
    {
        ++Amount[A[i]];
    }
 
    int k=0;
 
    for (i=0; i<m; i++)
    {
        for (int j=0; j<Amount[i]; j++)
        {
            A[k] = i;
            ++k;
        }
    }
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Метод простого включения
void SimplePut (int *A, int n)
{
    int i,j,Tmp;
 
    for (i=1;i<n;i++)
    {
        Tmp=A[i];
        j=i-1;
 
        while (A[j]>=Tmp && j>=0)
            { A[j+1]=A[j]; j--;}
 
        A[j+1]=Tmp;
    }
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
// Метод подсчета
void Counting(int *A, int *B, int n)
{
    for (int i=0; i<n; i++)
    {
        int k = 0;
 
        for (int j=0; j<n; j++)
            if (A[j] < A[i] || (A[j] == A[i] && j<i)) k++;
 
        B[k] = A[i];
    }
}
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
// Метод Шелла
void  Shell(int *A, int n)
{
    int h = n/2;
 
    while (h>0)
    {
        for (int i=0; i<n-h; i++)
        {
            int j = i;
        
            while (j>=0)
            {
                if (A[j] > A[j+h])
                {
                    int tmp = A[j];
                    A[j] = A[j+h];
                    A[j+h] = tmp;
                    j = j-h;
                } 
                else j--;
            }
 
        }
        h = h/2;
    }
}
5
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.03.2009, 20:10
Ответы с готовыми решениями:

Алгоритмы сортировок
Добрый день. Если у кого есть, просьба выложить коды следующих сортировок: Пирамидальная сортировка. Сортировка подсчетом Простое...

Алгоритмы сортировок
Наиболее часто задаваемые вопросы по С++. Реализация распространенных алгоритмов, решения типовых задач. Статьи и учебники C++ ...

Алгоритмы сортировок массива
Помогите пожалуйста написать программу на с++, которая будет содержать разные сортировки массива( для всех сортировок случайным образом...

12
jelenad
19.04.2009, 22:26
Сортировка Shell -как это все сделать используя аплеты java?
 Аватар для Gulnaz
5 / 5 / 1
Регистрация: 14.03.2008
Сообщений: 74
21.04.2009, 15:03
Любопытно,какой метод работает быстрее всех для очень больших массивов?
0
 Аватар для Gravity
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
21.04.2009, 15:05
Цитата Сообщение от Gulnaz Посмотреть сообщение
Любопытно,какой метод работает быстрее всех для очень больших массивов?
Метод быстрой сортировки (Хоара).
0
 Аватар для Gulnaz
5 / 5 / 1
Регистрация: 14.03.2008
Сообщений: 74
21.04.2009, 15:09
А для небольших массивов?
0
 Аватар для grrrrr
49 / 49 / 13
Регистрация: 21.04.2009
Сообщений: 265
30.06.2009, 09:50
Monte-Cristo, а метод простого включения и метод вставками это один и тот же алгоритм?
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
30.06.2009, 22:15  [ТС]
Сортировка включением (вставками - by insertion). Исходное множество элементов делят на две части: уже упорядоченную и неупорядоченную. Вначале упорядоченная часть состоит, как правило, из одного элемента – первого элемента, а все остальные элементы находятся в неупорядоченной части. Из неупорядоченной части берут очередной элемент и включают его в упорядоченную часть, помещая (вставляя) на нужное место (т.е. так, чтобы выполнялось отношение порядка). Так продолжают до тех пор, пока последний элемент из неупорядоченной части не будет включен в упорядоченную часть. Простой вариант сортировки включением – это метод прямого (простого) включения, улучшенный – сортировка методом Шелла.
0
11 / 11 / 0
Регистрация: 23.06.2009
Сообщений: 8
05.07.2009, 18:42
Слияния на паскале

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var
  mas,b:array[0..Max+1]of Longint;
procedure Msort(l,r:longint);
var i,j,k:longint;
begin
  if l>=r then exit;
  Msort(l,(l+r) div 2);
  Msort((l+r) div 2+1,r);
  j:=l;k:=(l+r) div 2+1;
  for i:=l to r do
    if (k>r) or((j<=(l+r) div 2) and(mas[j]<mas[k])) then
    begin b[i]:=mas[j];inc(j);end else
    begin b[i]:=mas[k];inc(k);end;
  for i:=l to r do mas[i]:=b[i];
end;
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
06.07.2009, 15:39
Monte-Cristo, вот в некоторых примерах ты используешь обычный обмен, например:
C++
1
2
3
4
5
6
7
if (A[j] > A[j+h])
{
    int tmp = A[j];
    A[j] = A[j+h];
    A[j+h] = tmp;
    j = j-h;
}
но мне кажется, что такой подход:
C++
1
2
3
4
5
if (A[j] > A[j+h])
{
    A[j] ^= A[j+h] ^= A[j] ^= A[j+h];
    j = j-h;
}
будет работать немного быстрее и не нужна еще дна переменная. Но такой подход работает только с целыми числами
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
06.07.2009, 16:25
По поводу того, какой метод сортировки работает быстрее. Самого быстрого метода нет, потому как в одном случае может быстрее отработать один метод,а вдругом - другой. Под случаями я имею ввиду входной массив. При этом в реальной жизни как правило оказывается, что массив - это не случайный набор элементов, а какой-то специфический, а потому в каждом конкретном случае разработчики выбирают свой алгоритм.

Вообще если кому интересны методы сортировки - в сборнике Дональда Кнута там порядка 200 страниц отведено под это дело
0
3 / 3 / 0
Регистрация: 14.12.2008
Сообщений: 30
07.07.2009, 16:26
Хм...а поразрядная сортировка есть?

Тьфу!!!Я забыла,что распределение и есть поразрядная))))
0
Maniac
Эксперт С++
 Аватар для ISergey
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
07.07.2009, 16:33
Цитата Сообщение от Юляшка Посмотреть сообщение
Хм...а поразрядная сортировка есть?
Алгоритмы сортировок
в самом низу
1
Заблокирован
11.12.2014, 17:39
А можно Монте-Кристо на паскале?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.12.2014, 17:39
Помогаю со студенческими работами здесь

Сортировка вектора с демонстрационной диаграммой. Сравнить различные алгоритмы сортировок по количеству операций.
Сортировка вектора.

меню сортировок
Первый case работает хорошо.а два последних не хотят... #include&lt;iostream&gt; #include&lt;ctime&gt; using namespace std; void main() { ...

3 вида сортировок
Добрый вечер, помогите решить лабораторную. Мне надо написать программу которая сортирует одномерный массив методом выбора, пузырька и...

Варианты сортировок
Здравствуйте! Вот есть два способа сортировки: #include &lt;iostream&gt; using namespace std; int main () { const int n=20; ...

Сравнение сортировок
Помогите с подсчетом количества сравнений в сортировках. Проблема заключается в том, что количество операций у сортировок практически...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru