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

С++ для начинающих

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

Найти ошибку в пирамидальной сортировке - C++

13.08.2014, 00:15. Просмотров 231. Ответов 2
Метки нет (Все метки)

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

Подскажите, пожалуйста, где ошибка.
Спасибо за помощь!
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
#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
 
void repair(long array[], long n, long i);
void build(long array[], long n);
void heap_sort(long array[], long size);
 
 
 
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, size);
    for (i = 0; i < size; i++)
    {
        cout << array[i] << endl;
    }
    cout << endl;
}
 
void repair(long array[], long n, long i)//i-индекс
{
    /*Нужно вычислить максимальный элемент из 3-х:
    1) текущий элемент
    2) левый потомок
    3) правый потомок
    Если индекс текущего элемента не равен индексу максимального,
    то меняю их местами и перехожу к максимальному*/
 
    long left = array[i * 2 + 1];//левый потомок
    long right = array[i * 2 + 2];//правый потомок
    long large = i;//индекс максимального в текущей тройке
    long value = array[i];//значение текущего элемента
 
    if ((left <= n) && (array[left] > array[i]))/*если есть левый потомок и он больше текущего,
                                                то он считается максимальным*/
    {
        large = left;
    }
    if ((right <= n) && (array[right] > array[i]))/*если есть правый потомок и он больше текущего,
                                                  то он считается максимальным*/
    {
        large = right;
    }
    if (large != i)/*Если текущий элемент не стал максимальным,
                   то меняем местами максимальный старый и максимальный новый*/
    {
        array[i] = array[large];
        array[large] = value;
        repair(array, n, large);
    }
}
 
void build(long array[], long n)
{
    // построение пирамиды из массива
    for (long i = n / 2; i >= 0; i--)
    {
        repair(array, n, i);
    }
}
 
void heap_sort(long array[], long size)//пирамидальная сортировка
{
    long n = size;
    build(array, size);
    while (n > 1)
    {
        n--;
        long first_el = array[0];
        array[0] = array[n];
        array[n] = first_el;
        repair(array, n, first_el);
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2014, 00:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти ошибку в пирамидальной сортировке (C++):

Ошибка в пирамидальной сортировке - C++
Здравствуйте, подскажите, пожалуйста, где ошибка, сортирует весь массив нормально, кроме одного числа которое находится на 5й позииции, в...

Найти ошибку в сортировке - C++
Помогите найти ошибку в сортировке!! #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;stdio.h&gt; class Organization { ...

Найти ошибку в сортировке одномерного массива - C++
Помогите пожалуйста никак не могу понять в чём беда,нужно вывести в порядке возрастания все нечётные элементы массива,в моей программе ...

Не могу найти ошибку при сортировке массивов - C++
Даны два числа n и m и два упорядоченных по неубыванию массива A&lt;=A&lt;=....&lt;=A и B&lt;=B&lt;=....&lt;=B. Образовать из элементов этих массивов новый...

Подскажите как найти ошибку в сортировке массива по возрастанию - C++
Кто может объясните пожалуйста не могу разобраться с сортировкой нужно отсортировать массив так чтобы с четными индексами значения шли по...

Найти и устранить ошибку в коде программы, возникающую при сортировке самодельного списка - C++
Доброго времени суток! Сделал сортировку, при отладке видно, что он сортирует, но в конце выбивает ошибку, помогите, пожалуйста. ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Warezovvv
9 / 9 / 2
Регистрация: 09.12.2012
Сообщений: 219
13.08.2014, 00:24 #2
Сразу скажу, если вы хотите быть программистом воспользуйтесь Отладчиком. Написать код может любой дурак, отладить не каждый.
SatanaXIII
Супер-модератор
Эксперт С++
5609 / 2643 / 244
Регистрация: 01.11.2011
Сообщений: 6,502
Завершенные тесты: 1
13.08.2014, 08:57 #3
Цитата Сообщение от GalkaP Посмотреть сообщение
Подскажите, пожалуйста, где ошибка
Ошибка в том, что это код C++ ,а вы его запускаете в C.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.08.2014, 08:57
Привет! Вот еще темы с ответами:

найдите ошибку в сортировке по возрастанию) - C++
#include &quot;stdafx.h&quot; // подключение файла перекомпилированного заголовка #include &quot;iostream&quot; // подключение библиотеки ввод/вывод ...

Помогите найти ошибки в сортировке List STL - C++
Ситуация такая. С помощью одного из пользователей форума дописал свой не рабочий код. И вроде бы всё хорошо. Но появилась ошибка с кейсом...

Как найти в этой сортировке количество перестановок и сравнений? - C++
Как найти в этой сортировке количество перестановок и сравнений? void InsertSort(int *mas, int N) //сортировка вставками { int...

Как найти в данной сортировке количество перестановок и сравнений? - C++
void quicksort(int *mas, int first, int last) { int mid, count, m=0; int f=first, l=last; int count_compare=0, count_swap=0; ...


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

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

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