Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 1
Регистрация: 24.11.2017
Сообщений: 13
1

Qsort при компиляции выдает переполнение стека

30.11.2017, 16:09. Показов 877. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите найти ошибку(при компиляции выдает переполнение стека). Заранее спасибо
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void sort(int *arr, int first, int last) {
    int i = first; int j = last; int tmp; int mid = arr[(first + last) / 2];
    while (i <= j) {
        while (arr[i] > mid)
            i++;
        while (arr[j] < mid)
            j--;
        if (i <= j) {
            tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
        }
        if (j>first) sort(arr, first, j);
        if (i<last) sort(arr, i, last);
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.11.2017, 16:09
Ответы с готовыми решениями:

Переполнение стека при работе с матрицей
Доброго времени суток. У меня такой вопрос: у меня есть матрица 1000x1000 тип float компиллятор на...

Переполнение стека при вычислении выражения
#include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; double eps=0.001; void main()...

Переполнение стека при первом же вызове функции
Обычно переполнение стека возникает при глубокой (в том числе бесконечной) рекурсии, не так ли? А...

Переполнение стека при вызове рекурсивной функции
Вообщем есть у меня рекурсивный вызов функции, и как я понял у меня переполняется некий &quot;стек...

2
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
30.11.2017, 16:31 2
переполнение стека в рекурсивной программе обычно означает что программа ушла в бесконечную рекурсию и не может остановиться, проверь условие остановки рекурсии.

Добавлено через 1 минуту
Цитата Сообщение от Kvmensku Посмотреть сообщение
if (j>first) sort(arr, first, j);
if (i<last) sort(arr, i, last);
это должно быть не в цикле, а в конце, за его пределами.
0
0 / 0 / 1
Регистрация: 24.11.2017
Сообщений: 13
30.11.2017, 17:20  [ТС] 3
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
это должно быть не в цикле, а в конце, за его пределами.
Исправил, ошибка пропала, но программа не заработала.
Тело главной функции:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main() {
    srand(time(NULL));
    int n;
    cin >> n;
    int *arr = new int[n];
    for (int i = 0; i < n; i++) {
        arr[i] = rand() % 100 + 1;
        if (i % 6 == 0) cout << endl;
        cout << "[" << setw(2) << i << "] -" << setw(3) << arr[i] << " ";
    }
    sort(arr, 0, n - 1);
    cout << endl << endl;
    for (int i = 0; i < n; i++) {
        if (i % 6 == 0) cout << endl;
        cout << "[" << setw(2) << i << "] -" << setw(3) << arr[i] << " ";
    }
    system("pause");
    return 0;
}
Добавлено через 37 минут
нашел решение, рабочий вариант:
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
 #include <cstdlib>
#include <iomanip>
using namespace std;
 
void sort(int *arr, int first, int last) {
    int i = first; int j = last; int tmp; int mid = arr[(first + last) / 2];
    while (i <= j) {
    
        while (arr[i] > mid)
            i++;
        while (arr[j] < mid)
            j--;
        if (i <= j) {
            tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
            i++; j--;
        }
    }
    
    if (j > first) sort(arr, first, j);
    if (i < last) sort(arr, i, last);
}
int main() {
    srand(time(NULL));
    int n;
    cin >> n;
    int *arr = new int[n];
    for (int i = 0; i < n; i++) {
        arr[i] = rand() % 100 + 1;
        if (i % 6 == 0) cout << endl;
        cout << "[" << setw(2) << i << "] -" << setw(3) << arr[i] << " ";
    }
    sort(arr, 0, n - 1);
    cout << endl << endl;
    for (int i = 0; i < n; i++) {
        if (i % 6 == 0) cout << endl;
        cout << "[" << setw(2) << i << "] -" << setw(3) << arr[i] << " ";
    }
    system("pause");
    return 0;
}
0
30.11.2017, 17:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.11.2017, 17:20
Помогаю со студенческими работами здесь

Переполнение стека при рекурсии
У меня есть рекурсионная функция. Заменить ее чем либо другим не получается. Но при выполнении ее...

Переполнение стека при рекурсии
имеется рекурсивный метод static double FixedPointIteration(double A, double b, double...

Переполнение стека при рекурсии
Код: public void FindEvenlyShadedAreas(Bitmap b, Color Color_Arr1, Color Color_Arr2,...

Переполнение стека при рекурсии
Есть такая задача: составить полный список всех папок на сервере. Делаю так static List&lt;string&gt;...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru