Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
03.12.2012, 00:33     Пирамидальная соритровка #1
Парни, есть код етой сориторви, есть масив который надо посортировать. Но есть проблема, я не знаю что надо передать в функцию heapsort(int n), что такое 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
58
59
60
61
#include <iostream>
#include <conio.h>
#include <time.h>
using namespace std;
 
struct INF
{
    int key;
    char info;
};
const int n = 10;
INF mas[n];
void heapsort (int);
void pushdown (int, int ) ;
void SWAP(int  ,int );
 
int main()
{
    srand(time(0));
    cout<<"MAS"<<endl<<endl;
    for(int i = 0;i < n;i++)
    {
        mas[i].key = rand()%20;
        cout<<mas[i].key<<" ";
    }
    cout<<endl<<endl;
    cout<<"Qsort";
    heapsort();
    getch();
    return 0;
}
void heapsort (int n) 
{
    for (int i=1; i<=(n/2); i++)
       pushdown (i, n);
 
    for (int i = n; i > 1; i--) 
    {         
        swap (mas[1], mas[0]);
        pushdown (1, i-1);
    }
}
void pushdown (int first, int last) 
{
    int j;
    int r = first;                                        
    while (r<=(last/2)) 
    {
        if ((2*r==last)||(mas[r*2].key<mas[2*r+1].key))
            j = 2*r;
        else
            j=2*r+1;
        if (mas[r].key>mas[j].key) 
        {
            swap(mas[r],mas[j]);
            r = j;
        }
        else
        break;
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2012, 00:33     Пирамидальная соритровка
Посмотрите здесь:

Алфавитная соритровка структур из файла C++
C++ Пирамидальная сортировка
C++ Пирамидальная сортировка
C++ Соритровка слиянием
Пирамидальная сортировка C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MaRKerNSK
 Аватар для MaRKerNSK
24 / 11 / 1
Регистрация: 26.11.2012
Сообщений: 110
Записей в блоге: 2
03.12.2012, 00:38     Пирамидальная соритровка #2
Вроде n это номер проверяемого элемента... или сортируемого, если вы содрали этот код с учебника то и объяснение его наверно можно найти там же
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
03.12.2012, 00:43  [ТС]     Пирамидальная соритровка #3
MaRKerNSK, из лекции, где не особо все описано.

Добавлено через 57 секунд
MaRKerNSK, то как мне переписать мейн, чтоб правильно вызвать функцию сортировки?
MaRKerNSK
 Аватар для MaRKerNSK
24 / 11 / 1
Регистрация: 26.11.2012
Сообщений: 110
Записей в блоге: 2
03.12.2012, 00:44     Пирамидальная соритровка #4
Да переписывать вроде ничего не надо) массив у тебя глобальный его отправлять никуда не надо ...
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
03.12.2012, 00:46  [ТС]     Пирамидальная соритровка #5
MaRKerNSK, ну а номер проверяемого елемента откуда брать? а то ночь, бошка совсем не варит)
MaRKerNSK
 Аватар для MaRKerNSK
24 / 11 / 1
Регистрация: 26.11.2012
Сообщений: 110
Записей в блоге: 2
03.12.2012, 00:47     Пирамидальная соритровка #6
Да у меня анологично 3,5 часа ночи, и бессоница, а мне на пары в 6 утра вставать... =(
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
03.12.2012, 00:54  [ТС]     Пирамидальная соритровка #7
MaRKerNSK, )) то как номер передать, не подскажешь?
MaRKerNSK
 Аватар для MaRKerNSK
24 / 11 / 1
Регистрация: 26.11.2012
Сообщений: 110
Записей в блоге: 2
03.12.2012, 00:56     Пирамидальная соритровка #8
Цитата Сообщение от ozzy_b Посмотреть сообщение
const int n = 10;
так ты n и передавай
C++
1
heapsort(n);
Ты и так её как константу обьявил)) так что вообще из функции её можеш выпилить))
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
03.12.2012, 01:03  [ТС]     Пирамидальная соритровка #9
MaRKerNSK, чтото оно не сортирует))
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
#include <iostream>
#include <conio.h>
#include <time.h>
using namespace std;
 
struct INF
{
    int key;
    char info;
};
const int n = 10;
INF mas[n];
void heapsort (int);
void pushdown (int, int ) ;
void SWAP(int  ,int );
 
int main()
{
    srand(time(0));
    cout<<"MAS"<<endl<<endl;
    for(int i = 0;i < n;i++)
    {
        mas[i].key = rand()%20;
        cout<<mas[i].key<<" ";
    }
    cout<<endl<<endl;
    cout<<"Qsort";
     for(int i = 0;i < n;i++)
    {
        mas[i].key = rand()%20;
        cout<<mas[i].key<<" ";
    }
    heapsort(n);
    getch();
    return 0;
}
void heapsort (int n) 
{
    for (int i=1; i<=(n/2); i++)
       pushdown (i, n);
 
    for (int i = n; i > 1; i--) 
    {         
        swap (mas[1], mas[0]);
        pushdown (1, i-1);
    }
}
void pushdown (int first, int last) 
{
    int j;
    int r = first;                                        
    while (r<=(last/2)) 
    {
        if ((2*r==last)||(mas[r*2].key<mas[2*r+1].key))
            j = 2*r;
        else
            j=2*r+1;
        if (mas[r].key>mas[j].key) 
        {
            swap(mas[r],mas[j]);
            r = j;
        }
        else
        break;
    }
}
Добавлено через 2 минуты
ой, ступил, сечас переправлю

Добавлено через 41 секунду
всеравно не сортирует как надо
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <conio.h>
#include <time.h>
using namespace std;
 
struct INF
{
    int key;
    char info;
};
const int n = 10;
INF mas[n];
void heapsort (int);
void pushdown (int, int );
void SWAP(int  ,int );
 
int main()
{
    srand(time(0));
    cout<<"MAS"<<endl<<endl;
    for(int i = 0;i < n;i++)
    {
        mas[i].key = rand()%20;
        cout<<mas[i].key<<" ";
    }
    cout<<endl<<endl;
    cout<<"Qsort";
     for(int i = 0;i < n;i++)
    {
        cout<<mas[i].key<<" ";
    }
    heapsort(n);
    getch();
    return 0;
}
void heapsort (int n) 
{
    for (int i=1; i<=(n/2); i++)
       pushdown (i, n);
 
    for (int i = n; i > 1; i--) 
    {         
        swap (mas[1], mas[0]);
        pushdown (1, i-1);
    }
}
void pushdown (int first, int last) 
{
    int j;
    int r = first;                                        
    while (r<=(last/2)) 
    {
        if ((2*r==last)||(mas[r*2].key<mas[2*r+1].key))
            j = 2*r;
        else
            j=2*r+1;
        if (mas[r].key>mas[j].key) 
        {
            swap(mas[r],mas[j]);
            r = j;
        }
        else
        break;
    }
}


Добавлено через 25 секунд
точнее не сортирует((
MaRKerNSK
 Аватар для MaRKerNSK
24 / 11 / 1
Регистрация: 26.11.2012
Сообщений: 110
Записей в блоге: 2
03.12.2012, 01:04     Пирамидальная соритровка #10
Блин ну не знаю... я алгоритм той сортировки не знаю... а почему тебе именно она нужна?? Если именно она то смотри алгоритм её=)
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
03.12.2012, 01:05  [ТС]     Пирамидальная соритровка #11
MaRKerNSK, либо быстрая сортировка, либо ета.
MaRKerNSK
 Аватар для MaRKerNSK
24 / 11 / 1
Регистрация: 26.11.2012
Сообщений: 110
Записей в блоге: 2
03.12.2012, 01:07     Пирамидальная соритровка #12
Ну по быстрой попробуй)) тут на форуме вроде не однократно обсуждалась)
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
03.12.2012, 01:07  [ТС]     Пирамидальная соритровка #13
MaRKerNSK, есть код одногрупника, но я не очень понимаю как оно работает
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
78
79
80
81
82
83
84
85
86
87
88
#include <iostream>
#include <conio.h>
#include <time.h>
using namespace std;
 
struct INF
{
    int key;
    char info;
};
const int n = 10;
INF mas[n];
int partition(int ,int ,int );
int find_pivot(int ,int );
void SWAP(int ,int );
 
 
void quick_sort(int i,int j)
{
    int pivot;
    int pivotindex;
    int k;
    pivotindex = find_pivot(i,j);
    if(pivotindex != -1)
    {
        pivot = mas[pivotindex].key;
        cout<<endl<<endl;
        k = partition(i,j,pivot);
        for(int i = 0;i < n;i++)
        {
            cout<<mas[i].key<<" ";
        }
        quick_sort(i,k-1);
        quick_sort(k,j);
    }
 
}
int main()
{
    srand(time(0));
    cout<<"MAS"<<endl<<endl;
    for(int i = 0;i < n;i++)
    {
        mas[i].key = rand()%20;
        cout<<mas[i].key<<" ";
    }
    cout<<endl<<endl;
    cout<<"Qsort";
    quick_sort(0,n-1);
    getch();
    return 0;
}
int find_pivot(int i,int j)
{
    int firstkey;
    firstkey = mas[i].key;
    for(int k=i+1;k <= j;k++)
    {
        if(mas[k].key > firstkey)
            return k;
        else
            if(mas[k].key < firstkey)
                return i;
    }
    return -1;
}
int partition(int i,int j,int pivot)
{
    int l,r;
    l = i;
    r = j;
    do
    {
        SWAP(l,r);
        while(mas[l].key < pivot)
            l++;
        while(mas[r].key >= pivot)
            r--;
    }
    while(l <= r);
    return l;
}
void SWAP(int a,int b)
{
    INF temp = mas[a];
     mas[a] = mas[b];
     mas[b] = temp;
}
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
03.12.2012, 01:08  [ТС]     Пирамидальная соритровка #14
во первых я не понимаю зачем там структура c int key и char info
MaRKerNSK
 Аватар для MaRKerNSK
24 / 11 / 1
Регистрация: 26.11.2012
Сообщений: 110
Записей в блоге: 2
03.12.2012, 01:09     Пирамидальная соритровка #15
Оо блин не всё мозг не варит, извиняюсь но я отлучусь)) =)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2012, 01:11     Пирамидальная соритровка
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
03.12.2012, 01:11  [ТС]     Пирамидальная соритровка #16
MaRKerNSK, ладно, спасибо хоть за ето))
Yandex
Объявления
03.12.2012, 01:11     Пирамидальная соритровка
Ответ Создать тему
Опции темы

Текущее время: 19:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru