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

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

Восстановить пароль Регистрация
 
smuglik26
0 / 0 / 0
Регистрация: 17.04.2013
Сообщений: 4
17.03.2014, 19:47     Пирамидальная сортировка #1
Добрый Вечер!
Нужно сделать Пирамидальную сортировку. Немного получилось, но программа работает так как хотелось бы. Не сортирует последний шаг.
Не могу найти в чем ошибка. Прикрепил код, помогите кому не сложно.
Заранее спасибо!
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
#include <iostream>
using namespace std;
void Heapify(int A[], int i, int heapsize);
void HeapSort(int A[], int heapsize);
void BuildHeap(int A[], int heapsize);
int main()
{
    const int heapsize = 6;
    int A[] = { 1, 6, 45, 7, 2, 3 };
    for (int i = 0; i <= heapsize - 1; i++)
    {
        cout << A[i] << endl;
    }
    HeapSort(A, heapsize);
    cin.get();
    return 0;
}
int Parent(int i)
{
    return ((i-1) / 2);
}
int Left(int i)
{
    return (2 * i + 1);
}
int Right(int  i)
{
    return (2 * i + 2);
}
void Heapify(int A[], int i, int heapsize)
{
    int l = Left(i),
        r = Right(i),
        largest, temp;
    if (l <= heapsize && A[l] > A[i])
    {
        largest = l;
    }
    else
    {
        largest = i;
    }
    if (r <= heapsize && A[r] > A[i])
    {
        largest = r;
    }
    
    if (largest != i)
    {
        temp = A[i];
        A[i] = A[largest];
        A[largest] = temp;
        Heapify(A, largest, heapsize);
    }
}
void BuildHeap(int A[], int heapsize)
{
    for (int i = (heapsize-1)/2; i >= 0; i--)
    {
    Heapify(A, i, heapsize);
    }
}
void HeapSort(int A[], int heapsize)
{
    int temp;
    BuildHeap(A, heapsize);
    cout << "mass:  ";
    for (int j = heapsize - 1; j >= 0; j--)
    {
        cout << A[j] << " ";
    }
    for (int i = heapsize; i > 0; i--)
    {
        temp = A[i];
        A[i] = A[heapsize - 1];
        A[heapsize - 1] = temp;
        heapsize = heapsize - 1;
        Heapify(A, i, heapsize);
 
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2014, 19:47     Пирамидальная сортировка
Посмотрите здесь:

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

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
_include
Студент
 Аватар для _include
52 / 52 / 12
Регистрация: 17.09.2012
Сообщений: 291
Записей в блоге: 2
Завершенные тесты: 1
17.03.2014, 21:58     Пирамидальная сортировка #2
Почему бы не использовать при передаче массивов в функции указатели, не задать размерность массива сразу, ведь heapsize это размер массива? Проверьте циклы, может заместо i > 0 стоит использовать i >= 0? как вариант последний шаг может не выполняться. Нумерация в массивах в С/С++ начинается с 0 ведь :3
Yandex
Объявления
17.03.2014, 21:58     Пирамидальная сортировка
Ответ Создать тему
Опции темы

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