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

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

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

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