Форум программистов, компьютерный форум, киберфорум
Наши страницы

C для начинающих

Войти
Регистрация
Восстановить пароль
 
GalkaP
0 / 0 / 0
Регистрация: 19.06.2014
Сообщений: 95
#1

Ошибка в реализации пирамидальной сортировки - C (СИ)

19.08.2014, 18:48. Просмотров 291. Ответов 0
Метки нет (Все метки)

Здравствуйте!

Осваиваю сортировки и вот застряла на пирамидальной.
Поняла алгоритм, но, видимо, что-то все-таки пропустила.
Помогите, пожалуйста, найти ошибку.
Буду очень благодарна!

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
89
90
91
92
93
94
95
96
97
#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
 
 
void repair(long array[], long i);
void build(long array[]);
void heap_sort(long array[]);
 
 
void main()
{
    long i;
    const long size = 10;
    long array[size];
    cout << "Array: " << endl;
    srand(time(NULL));
    for (i = 0; i < size; i++)
    {
        array[i] = rand() % 100;
        cout << array[i] << endl;
    }
    cout << endl;
 
 
    cout << "Culled array by heap sort: " << endl;
    heap_sort(array);
    for (i = 0; i < size; i++)
    {
        cout << array[i] << endl;
    }
    cout << endl;
}
 
 
void repair(long array[], long i)//i-индекс, n-размер пирамиды
{
    /*Нужно вычислить максимальный элемент из 3-х:
    1) текущий элемент
    2) левый потомок
    3) правый потомок
    Если индекс текущего элемента не равен индексу максимального,
    то меняю их местами и перехожу к максимальному*/
 
    const long size = 10;
    long left = array[i * 2 + 1];//левый потомок
    long right = array[i * 2 + 2];//правый потомок
    long large = i;//индекс максимального в текущей тройке
    long value = array[i];//значение текущего элемента
 
    if ((left <= size) && (array[left] > array[i]))/*если есть левый потомок и он больше текущего,
                                                то он считается максимальным*/
    {
        large = left;
    }
    if ((right <= size) && (array[right] > array[i]))/*если есть правый потомок и он больше текущего,
                                                  то он считается максимальным*/
    {
        large = right;
    }
    if (large != i)/*Если текущий элемент не стал максимальным,
                   то меняем местами максимальный старый и максимальный новый*/
    {
        array[i] = array[large];
        array[large] = value;
        repair(array, large);
    }
}
 
void build(long array[])
{
    const long size = 10;
    // построение пирамиды из массива
    for (long i = size / 2; i >= 0; i--)
    {
        repair(array, i);
    }
}
 
void heap_sort(long array[])//пирамидальная сортировка
{
    
    build(array);
    const long size = 10;
    long n = size;
    int large = 0;//первый элемент - максимальный
    for (int i = n - 1; i >= 1; i--)
    {
        
        int k = array[large];
        array[large] = array[i];
        array[i] = array[large];
        n--;
        repair(array, large);
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.08.2014, 18:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка в реализации пирамидальной сортировки (C (СИ)):

Отсортировать массив методами: бинарных вставок, пузырька, пирамидальной сортировки и qsort - C (СИ)
помогите, в сортировке по убыванию элементов. Методы: бинарных вставок, пузырька , пирамидальная сортировка и qsort(). N1=500, N2=1000,...

Ошибка в реализации стека - C (СИ)
Доброго дня, господа форумчане. Стек я реализовал таким вот образом: struct stack { int* arr; int cur; int size; }; ...

Найти ошибку в пирамидальной сортировке - C (СИ)
Здравствуйте! Подскажите, пожалуйста, где ошибка. Спасибо за помощь! #include&lt;iostream&gt; #include&lt;stdlib.h&gt; #include&lt;time.h&gt;...

Ошибка сортировки вставками - C (СИ)
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; int main() { clrscr(); textcolor(14); unsigned long iran; ...

Ошибка в программе сортировки строк - C (СИ)
Делаю программу, которая реализует сортировку строк, т.е. я ввожу 9 слов и программа должна отсортировать в алфавитном порядке. Но сделать...

Сортировки в файле (метод сортировки выбирается пользователем) - C (СИ)
помогите пожалуйста соединить 3 сортировки , что бы они проходили в файле. и перед началом можно было выбрать каким способом будет...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2014, 18:48
Привет! Вот еще темы с ответами:

Сортировки через меню и ошибка "Undefined reference" - C (СИ)
Полностью готовый код. Но на 24 строке выдает undefined reference to `outpupmas'. Никак не могу убрать. #include &lt;stdio.h&gt; #include...

Ошибка в реализации сортировки слиянием - Visual Basic .NET
Перевел с паскаля на vb.net сортировку вставками Вот что получилось Sub MergeSort(ByRef d() As Double) Dim m, n, k As Long ...

Ошибка в реализации быстрой сортировки - Prolog
Сортирует список быстрой сортировкой, результирующий список - Ls. Вместо результата при вызове цели выводится false... Что это значит, и...

Ошибка в реализации сортировки выбором - Fortran
Опять не вижу ошибки в коде. Выдает ту же числовую последовательность program sortirovka implicit none real(8) item,cnt Integer,...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru