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

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

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

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

31.03.2014, 09:58. Просмотров 507. Ответов 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++
Пирамидальная сортировка C++
пирамидальная сортировка C++
C++ Пирамидальная сортировка
C++ Пирамидальная сортировка
C++ Пирамидальная сортировка
C++ Пирамидальная сортировка
Пирамидальная сортировка C++
Пирамидальная сортировка. Вводить исходный массив вручную C++
Пирамидальная сортировка C++
C++ Пирамидальная сортировка
C++ Пирамидальная сортировка

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ilot
Модератор
Эксперт С++
1780 / 1155 / 223
Регистрация: 16.05.2013
Сообщений: 3,042
Записей в блоге: 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
Модератор
Эксперт С++
1780 / 1155 / 223
Регистрация: 16.05.2013
Сообщений: 3,042
Записей в блоге: 5
Завершенные тесты: 1
02.04.2014, 09:32     Пирамидальная сортировка. Считать из файла массив #4
Цитата Сообщение от aksdaqg Посмотреть сообщение
Запускается, но при выборе размерности массива n выбивает ошибку vector subscript out of range
Нужен код. Так как в коде выше такое исключение генерироваться не должно. Правильнее сказать его не кому генерировать.
Yandex
Объявления
02.04.2014, 09:32     Пирамидальная сортировка. Считать из файла массив
Ответ Создать тему
Опции темы

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