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

Ошибка при запуске программы - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ошибка при компиляции http://www.cyberforum.ru/cpp-beginners/thread568100.html
Вот сам код где ошибка // Race value is index in ChrRaces.dbc enum Races { RACE_HUMAN = 1, RACE_ORC = 2, RACE_DWARF = 3, RACE_NIGHTELF = 4, ...
C++ Програма сортировки одномерного масива методом быстрой сортировки на С++ только еще с окнами и формами и коментариями Програма должна считывать масив из какого либо файла,а у меня ничего не получаеться!!!Зарание спасибо(*_*) http://www.cyberforum.ru/cpp-beginners/thread568095.html
C++ Общее количество цифр в числовых значениях всех положительных элементов массива
Ребята, пожалуйста, помогите написать программу! :( уже голову сломала... Дан целочисленный массив A. Определить общее количество цифр в числовых значениях всех положительных элементов массива
Итератор для массива C++
Доброго времени суток, дорогие форумчане! К сожалению, снова вынужден просить у вас помощи: необходимо создать итератор, НО: в связи с тем, что мой контейнер создан из набора элементарных...
C++ Найти сумму ряда с заданной точностью c http://www.cyberforum.ru/cpp-beginners/thread568045.html
Найти сумму ряда с заданной точностью. Точность и значение переменной х вводить с клавиатуры. Осуществить проверку ошибок ввода. Считать ошибочными значения х, которые приводят к расхождению ряда. ...
C++ Метод броуновского моделирования Здравствуйте. Суть проблемы такова: нужно реализовать метод броуновского блуждания ансамбля частиц в миллион штук. Как задать этот ансамбль? Вектором или массивом? подробнее

Показать сообщение отдельно
assasko
0 / 0 / 0
Регистрация: 20.05.2011
Сообщений: 18

Ошибка при запуске программы - C++

07.05.2012, 20:00. Просмотров 740. Ответов 14
Метки (Все метки)

Сделал алгоритм слияния, нужно проверить время сортировки от 10000 элементов до 100000 (10тыс., 20тыс., ... 100тыс.) При 10 и 20 тысячах элементов все нормально работает. Но когда пытаюсь 30тыс и больше выдает ошибку.
Вот код программы:
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
#include <cstdlib>
#include <iostream>
#include <ctime>
#include <windows.h>
 
 
using namespace std;
 
void merge(double *mas,long n,int l, int r);
 
int main(int argc, char *argv[])
{
    cout << "Zadayte chislo elementov v massive N = ";
    long n;
    cin >> n;
    double *mas=new double[n];
    srand((unsigned)time(NULL));
    for (int i=0; i<n; i++)
    { mas[i]=(int)rand()/rand()+1;
   /* cout << mas[i] <<" ";*/}
    //cout << endl;
    //cout << "==========================================="<<endl;
    double t1=clock();
    merge(mas,n,0, n-1);
    double t2=clock();
    /*for (int i=0; i<n; i++)
    {cout << mas[i] <<" ";}*/
    cout << endl;
    cout <<"t1 = "<<t1<<endl;
    cout <<"t2 = "<<t2<<endl;
    cout << "\nVremya rascheta = " <<(t2-t1)/CLOCKS_PER_SEC << endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
void merge(double *mas,long n,int l, int r) {
    if (r == l)
        return;
    //если остается 2 элемента то меняем их местами
    if (r - l == 1) { 
        if (mas[r] < mas[l])
            swap(mas[r], mas[l]);
        return;
    }
    //деление массива пополам
    int m = (r + l) / 2;
    //рекурсивный вызов функции для левой и правой части массива
    merge(mas,n,l, m);
    merge(mas,n,m + 1, r);
    //массив в котором будет происходить слияние частей
    double *buf=new double[n];
    int xl = l;
    int xr = m + 1;
    int cur = 0;
    //пока существует хотябы 1 элемент выполняится слияние
    while (r - l + 1 != cur) {
        //сравнение єлементов подмассивов, процесс слияния подмассивов
        if (xl > m)
            buf[cur++] = mas[xr++];
        else if (xr > r)
            buf[cur++] = mas[xl++];
        else if (mas[xl] > mas[xr])
            buf[cur++] = mas[xr++];
        else buf[cur++] = mas[xl++];
 
    }
    for (int i = 0; i < cur; i++)
        mas[i + l] = buf[i];
}
Помогите пожалуйста.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru