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

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

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

Пирамидальная сортировка. Считать из файла массив - C++

31.03.2014, 09:58. Просмотров 562. Ответов 3
Метки нет (Все метки)

реализовать алгоритм пирамидальной сортировки исходного массива размерностью 250< n <1000, расположенном в некотором исходном файле.
Вот что получилось. Но мне нужно зарандомить файл целыми числами и считать из него массив и отсортировать.
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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <cstdlib>
 
using namespace std;
 
void iswap(int &n1, int &n2)
{
    int temp = n1;
    n1 = n2;
    n2 = temp;
}
 
int main()
{
    int const n = 100;
    int a[n];
    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] << " "; 
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2014, 09:58     Пирамидальная сортировка. Считать из файла массив
Посмотрите здесь:

Пирамидальная сортировка. Вводить исходный массив вручную - C++
Всем привет. Есть такая пирамидальная сортировка #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; void iswap(int...

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

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

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

Пирамидальная сортировка - C++
int HeapSort (int *a, int n) { int left = n/2+1, right=n-1, x; while (left&gt;1) sift (a, --left, right); while (right&gt;1) {...

Пирамидальная сортировка - C++
Здраствуйте! Я хотел бы вас попросить о помощи! Помогите пожалуйста сделать это задание методом пирамидальной сортировки. ...

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

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

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

Пирамидальная сортировка по убыванию - C++
Всем привет. Требуется реализовать пирамидальную сортировку по убыванию. Как делается сортировка по возрастанию мне известно. Как это можно...

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

Считать массив А с файла a.txt. после чего сформировать массив С в котором все отрицательные элементы с масси - C++
Помогите написать программу на C++. Изучала этот язык меньше пол года, пока есть проблемы. очень нужна ваша помощь Считать массив А с файла...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ilot
Модератор
Эксперт С++
1788 / 1163 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
31.03.2014, 10:42     Пирамидальная сортировка. Считать из файла массив #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вы будете удивлены, но в стандартной библиотеке есть функция swap. Включайте заголовочник utility.
Далее по сути вопроса.
Цитата Сообщение от aksdaqg Посмотреть сообщение
Но мне нужно зарандомить файл целыми числами
Тут два варианта либо изучайте заголовочник random либо используйте стандартную ф-ю С++98 rand() (без проверок на ошибки):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//Запись
srand(time(NULL));
ofstream fout("data.txt");
for(int i = 0; i < N; ++i) {
    array[i] rand();
    fout << array[i];
}
fout.close();
//Чтение
ifstream fin("data.txt");
for(int i = 0; i < N; ++i) {
    fin >> a[i];
}
aksdaqg
0 / 0 / 0
Регистрация: 31.03.2014
Сообщений: 115
31.03.2014, 21:12  [ТС]     Пирамидальная сортировка. Считать из файла массив #3
Запускается, но при выборе размерности массива n выбивает ошибку vector subscript out of range
Ilot
Модератор
Эксперт С++
1788 / 1163 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
02.04.2014, 09:32     Пирамидальная сортировка. Считать из файла массив #4
Цитата Сообщение от aksdaqg Посмотреть сообщение
Запускается, но при выборе размерности массива n выбивает ошибку vector subscript out of range
Нужен код. Так как в коде выше такое исключение генерироваться не должно. Правильнее сказать его не кому генерировать.
Yandex
Объявления
02.04.2014, 09:32     Пирамидальная сортировка. Считать из файла массив
Ответ Создать тему
Опции темы

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