Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
 Аватар для p1ka4y777
2 / 2 / 2
Регистрация: 04.10.2013
Сообщений: 155

Пирамидальная сортировка

06.11.2013, 20:35. Показов 4517. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Каким будет порядок элементов списка [3, 9, 14, 12, 2, 17, 15, 8, 6, 18, 20, 1] после применения к нему этапа построения пирамиды? Поделитесь опытом, желанно парочку комментарий...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.11.2013, 20:35
Ответы с готовыми решениями:

Сортировка Шелла и пирамидальная сортировка для символов
Здраствуйте, можете пожалуйста привести пример сортировок шелла и пиромидальной сортировки для символов, а то ничего не могу ...

2 сортировки: пирамидальная сортировка и сортировка слиянием
Реализовать два улучшенных алгоритма сортировки. Для каждого алгоритма вычислить показатель качества сортировки (количество операций, т.е....

Пирамидальная сортировка
дайте пожалуйста код на сортировку массива пирамидальной сортировкой.

8
30 / 30 / 9
Регистрация: 01.11.2013
Сообщений: 63
06.11.2013, 21:10
Цитата Сообщение от p1ka4y777 Посмотреть сообщение
Каким будет порядок элементов списка [3, 9, 14, 12, 2, 17, 15, 8, 6, 18, 20, 1] после применения к нему этапа построения пирамиды? Поделитесь опытом, желанно парочку комментарий...
С бинарными деревьями знаком?
0
 Аватар для p1ka4y777
2 / 2 / 2
Регистрация: 04.10.2013
Сообщений: 155
06.11.2013, 21:37  [ТС]
Цитата Сообщение от reckless91 Посмотреть сообщение
С бинарными деревьями знаком?
да...
0
30 / 30 / 9
Регистрация: 01.11.2013
Сообщений: 63
06.11.2013, 22:25
Цитата Сообщение от p1ka4y777 Посмотреть сообщение
да...
Для начала попробуй с лева направо добавлять элементы в дерево...
примерно так:
1 шаг -> 3 корень (нечего просеивать)
2 шаг -> 9 левый потомок
просеиваешь "9" вверх... 9>3 меняешь местами, теперь 9 -корень, 3 - левый
3 шаг -> 14 правый потомок
просеиваешь "14" вверх... 14>9 меняешь местами, теперь 14 -корень, 9 - правый , 3 - левый
ход мыслей понятен??? нарисуй конечное дерево или напиши в строку что получится... затем объясню дальше

Добавлено через 6 минут
или вот почитай http://iproc.ru/parallel-programming/lection-5/
там гифка тебе все лучше любого человека объяснит
0
 Аватар для p1ka4y777
2 / 2 / 2
Регистрация: 04.10.2013
Сообщений: 155
06.11.2013, 23:34  [ТС]
Цитата Сообщение от reckless91 Посмотреть сообщение
Для начала попробуй с лева направо добавлять элементы в дерево...
примерно так:
1 шаг -> 3 корень (нечего просеивать)
2 шаг -> 9 левый потомок
просеиваешь "9" вверх... 9>3 меняешь местами, теперь 9 -корень, 3 - левый
3 шаг -> 14 правый потомок
просеиваешь "14" вверх... 14>9 меняешь местами, теперь 14 -корень, 9 - правый , 3 - левый
ход мыслей понятен??? нарисуй конечное дерево или напиши в строку что получится... затем объясню дальше
увидеть бы код...
0
30 / 30 / 9
Регистрация: 01.11.2013
Сообщений: 63
06.11.2013, 23:44
Цитата Сообщение от p1ka4y777 Посмотреть сообщение
увидеть бы код...
Вот и я так думаю, пишите - посмотрим, подправим.
0
 Аватар для p1ka4y777
2 / 2 / 2
Регистрация: 04.10.2013
Сообщений: 155
07.11.2013, 00:14  [ТС]
Цитата Сообщение от reckless91 Посмотреть сообщение
Вот и я так думаю, пишите - посмотрим, подправим.
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include "stdafx.h"
#include <iostream>
#include <conio.h>
 
using namespace std;
 
void iswap(int &n1, int &n2)
{
    int temp = n1;
    n1 = n2;
    n2 = temp;
}
 
int main()
{
    int const n = 12;
    int a[n] = {3, 9, 14, 12, 2, 17, 15, 8, 6, 18, 20, 1};
    for ( int i = 0; i < n; ++i ) 
   {
       a[i] = n - i; cout << a[i] << " "; 
   }
  //-----------сортировка------------// 
 
 
    int sh = 0; //смещение
    bool b = false;
    for(;;)
    {
        b = false;
        for ( int i = 0; i < n; i++ )
        {
            if( i * 2 + 2 + sh < n )
            {
                if( ( a[i + sh] > a[i * 2 + 1 + sh] ) || ( a[i + sh] > a[i * 2 + 2 + sh] ) )
                {
                    if ( a[i * 2 + 1 + sh] <  a[i * 2 + 2 + sh] ) 
                    {
                        iswap( a[i + sh], a[i * 2 + 1 + sh] );
                        b = true;
                    }
                    else if ( a[i * 2 + 2 + sh] < a[ i * 2 + 1 + sh]) 
                         {
                             iswap( a[ i + sh], a[i * 2 + 2 + sh]);
                             b = true;
                         }
                }
                //дополнительная проверка для последних двух элементов
               //с помощью этой проверки можно отсортировать пирамиду 
               //состоящую всего лишь из трех элементов
                    if( a[i*2 + 2 + sh] < a[i*2 + 1 + sh] ) 
                        {
                        iswap( a[i*2+1+sh], a[i * 2 +2+ sh] );
                        b = true;
                        }
            }
            else if( i * 2 + 1 + sh < n )
                 {
                     if( a[i + sh] > a[ i * 2 + 1 + sh] )
                     {
                         iswap( a[i + sh], a[i * 2 + 1 + sh] );
                         b = true;
                     }
                 }
        }
        if (!b) sh++; //смещение увеличивается, когда на текущем этапе 
                      //сортировать больше нечего
        if ( sh + 2 == n ) break; 
    }  //конец сортировки
 
 
    cout << endl << endl;
    for ( int i = 0; i < n; ++i ) cout << a[i] << " "; 
 
 
    _getch();
    return 0;
}
жду Вашей критики
0
30 / 30 / 9
Регистрация: 01.11.2013
Сообщений: 63
07.11.2013, 00:50
Цитата Сообщение от p1ka4y777 Посмотреть сообщение
жду Вашей критики
Зачем вы используете const??? (int const n = 12
Зачем сначала инициализировать массив int a[n] = {3, 9, 14, 12, 2, 17, 15, 8, 6, 18, 20, 1};
А затем его забивать совсем другим???
for ( int i = 0; i < n; ++i )
{
a[i] = n - i; cout << a[i] << " ";
}

Добавлено через 4 минуты
p1ka4y777, Можете не стараться ответить... да и критиковать я ничего не буду, какой смысл обсуждать комипаст http://easylab.net.ua/sortirov... sortirovka
Рад за вас, что Вы нашли то, что искали... удачи

Добавлено через 9 минут
Цитата Сообщение от p1ka4y777 Посмотреть сообщение
Каким будет порядок элементов списка [3, 9, 14, 12, 2, 17, 15, 8, 6, 18, 20, 1] после применения к нему этапа построения пирамиды?
P.S. Вот только это не то, что вам требуется исходя из задания
Правильный ответ: 20, 18, 15, 8, 17, ...
0
 Аватар для p1ka4y777
2 / 2 / 2
Регистрация: 04.10.2013
Сообщений: 155
07.11.2013, 02:57  [ТС]
спасибо за Ваши отзывы)

Добавлено через 2 часа 4 минуты
Цитата Сообщение от reckless91 Посмотреть сообщение
P.S. Вот только это не то, что вам требуется исходя из задания
Правильный ответ: 20, 18, 15, 8, 17, ...
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
#include "stdafx.h"
#include <iostream>
using namespace std;
 
template<typename T>
void downHeap(T a[], long k, long n) 
{
    T new_elem;
    long number;
    new_elem = a[k];
 
    while(k <= n/2) 
{
        number = 2*k;
        if( number < n && a[number] < a[number+1] ) 
            number++;
        if( new_elem >= a[number] ) break; 
        // иначе 
        a[k] = a[number];
        k = number;
    }
    a[k] = new_elem;
}
 
template<typename T>
void heapSort(T a[], long size) 
{
    long i;
    T temp;
    for(i=size/2-1; i >= 0; i--) downHeap(a, i, size-1);
    for(i=size-1; i > 0; i--) 
    {
        temp=a[i]; a[i]=a[0]; a[0]=temp;
        downHeap(a, 0, i-1); 
         }
}
int main()
{
 
    int arr[12] = {3, 9, 14, 12, 2, 17, 15, 8, 6, 18, 20, 1};
    heapSort(arr, 12);
 
    cout<<"[ ";
    for(int i = 0; i < 12; ++i)
        cout<<arr[i]<<" ";
    cout<<"]"<<endl;
    system ("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.11.2013, 02:57
Помогаю со студенческими работами здесь

Пирамидальная сортировка
Соритровка работает, но при больших значениях очень долго, помогите найти проблему Вообщем элементы массива А поступают на вход программы...

Пирамидальная сортировка
Добрый Вечер! Нужно сделать Пирамидальную сортировку. Немного получилось, но программа работает так как хотелось бы. Не сортирует...

Пирамидальная сортировка
Может кто может выложить примеры: 1) пирамидальной сортировки 2) сортировка простым выбором Они нужны в курсовую как примеры ...

Пирамидальная сортировка
Всем hello!!! Плиз помогите реализовать пирамидальную сортировку на С++!!! Зарание блогодарен!!!

Пирамидальная сортировка
Здравствуйте! Хотела попросить помощи. Мне нужно отсортировать дерево пирамидальной сортировкой. Создание дерева у меня есть, но сортировка...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
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