45 / 45 / 23
Регистрация: 14.04.2013
Сообщений: 188
1

Почему программа падает при сортировке массивов больших размерностей

09.09.2014, 22:55. Показов 835. Ответов 6
Метки нет (Все метки)

Добрый день!
Подскажите почему прога крашится при размере массива 10000, при значении 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
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <ctime>
 
void my_sort(int *ar, int first, int last);
const int SIZE = 1000;
 
int main()
{
    int ar1[SIZE];
    for (int i = 0; i < SIZE; i++)
        ar1[i] = std::rand() % SIZE + 1;
    int ar2[SIZE];
    std::copy(ar1, &ar1[SIZE], ar2);
 
    std::cout << "Massiv size = " << SIZE << std::endl;
 
    clock_t start1 = clock();
    std::sort(ar2, &ar2[SIZE]);
    clock_t end1 = clock();
    std::cout << "std::sort() time = " << (double)(end1 - start1) / CLOCKS_PER_SEC << " sec" << std::endl;
 
    clock_t start2 = clock();
    my_sort(ar1, 0, SIZE);
    clock_t end2 = clock();
 
    std::cout << "my sort() time = " << (double)(end2 - start2) / CLOCKS_PER_SEC << " sec" << std::endl;
 
    system("pause");
    return 0;
}
 
void my_sort(int *ar, int first, int last)
{
 
        int fs = first, ls = last;
        int temp;
        if (ls > fs)
        {
            int max_index = fs, min_index = fs; 
            for (int i = fs; i < ls; i++) // нахождение макс и мин элементов
            {
                if (ar[i] > ar[max_index])
                    max_index = i;
                if (ar[i] < ar[min_index])
                    min_index = i;
            }
 
 
            if ((max_index == (ls - 1) && min_index == fs) || (max_index == fs && min_index == (ls - 1))) // сортировка 2 посл. элементов
            {
                temp = ar[max_index];
                ar[fs] = ar[min_index];
                ar[ls - 1] = temp;
            }
 
            else if (min_index == (ls - 1)) // Если минимальный элемент в конце
            {
                temp = ar[fs];
                ar[fs] = ar[min_index];
                ar[ls - 1] = ar[max_index];
                ar[max_index] = temp;
            }
 
            else if (max_index == (ls - 1)) // Если максимальный элемент в конце
            {
                temp = ar[fs];
                ar[fs] = ar[min_index];
                ar[min_index] = temp;
            }
 
            else if (max_index == fs) // Если максимальный элемент в начале
            {
                temp = ar[ls - 1];
                ar[ls - 1] = ar[max_index];
                ar[fs] = ar[min_index];
                ar[min_index] = temp;
            }
 
            else if (min_index == fs) // Если минимальный элемент в начале
            {
                temp = ar[ls - 1];
                ar[ls - 1] = ar[max_index];
                ar[max_index] = temp;
            }
 
            else // остальные случаи
            {
                temp = ar[ls - 1];
                ar[ls - 1] = ar[max_index];
                ar[max_index] = temp;
 
                temp = ar[fs];
                ar[fs] = ar[min_index];
                ar[min_index] = temp;
            }
            fs++;
            ls--;
        
            if (ls > fs)
                my_sort(ar, fs, ls);
        }
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.09.2014, 22:55
Ответы с готовыми решениями:

Падает программа на сортировке массивов и поиске количества операций сравнений
Падает программа в разделе &quot;эксперименты&quot;. program laba; uses crt; type

Почему программа выдает мусор при сортировке извлечением?
Почему выдает мусор при сортировке извлечением(типо -84554515 и похожие числа),остальные нормально...

Почему при записи в не выделенную память программа не падает?
Разбираюсь с malloc(), делаю так: #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; ...

Почему при изменении литерала const char* программа падает?
точнее литерала. ладно, если бы выходил за пределы

6
1939 / 1512 / 635
Регистрация: 27.07.2012
Сообщений: 4,557
09.09.2014, 23:08 2
Цитата Сообщение от Zazy Посмотреть сообщение
прога крашится
Как именно?
0
31 / 35 / 11
Регистрация: 14.07.2013
Сообщений: 146
09.09.2014, 23:13 3
Поток, превышающий выделенный ему стек, вызывает исключение. Это исключение может быть перехвачено с помощью ключевых слов __try и __except
0
1939 / 1512 / 635
Регистрация: 27.07.2012
Сообщений: 4,557
09.09.2014, 23:16 4
Цитата Сообщение от dima55501 Посмотреть сообщение
Поток, превышающий выделенный ему стек, вызывает исключение.
10000 как-то маловато для стек-оверфлоу, хотя всякое может быть.
0
45 / 45 / 23
Регистрация: 14.04.2013
Сообщений: 188
09.09.2014, 23:19  [ТС] 5
Цитата Сообщение от dima55501 Посмотреть сообщение
Поток, превышающий выделенный ему стек
Про это где можно почитать ?
0
31 / 35 / 11
Регистрация: 14.07.2013
Сообщений: 146
09.09.2014, 23:21 6
Zazy, http://support.microsoft.com/kb/315937/ru
0
What a waste!
1607 / 1299 / 180
Регистрация: 21.04.2012
Сообщений: 2,726
09.09.2014, 23:22 7
Цитата Сообщение от John Prick Посмотреть сообщение
10000 как-то маловато для стек-оверфлоу, хотя всякое может быть.
Там рекурсия ещё...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.09.2014, 23:22
Помогаю со студенческими работами здесь

Почему при разборе больших текстов на английском программа работает не правильно?
Написал программу, которая должна принять на вход текст любого размера, разбить его на слова и...

Массивы больших размерностей
Нужно создать массив чисел большого размера (порядка 100000х100000 точек типа double). Оперативной...

Многопоточность при сортировке массивов
Уважаемые, столкнулся с ситуацией, имею 3 массива, содержимое которых одинаково (координаты точек в...

Почему падает программа?
Почему падает программа? Компилируется без ошибок, но при запуске аварийное завершение работы....

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

Падает Word при открытии файлов больших объемов 4-5 метров.
Помогите пожалуйста, не могу работать. Открывает, а потом закрывается секунды через 4. Стоит Ворд...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru