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

Сортировка подсчетом и переполнение стека

10.05.2015, 20:22. Показов 869. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Все здравствуйте, мне необходимо выполнить сортировку подсчетом, но вот проблема - переполнение стеков.Как решить эту проблему - не имею ни малейшего понятия.
P.S. Мой уровень программирования на Си оставляет желать лучшего.
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 <stdio.h>
#include <stdlib.h>
 
void printArray(int * array, int size){
 
  int curr;
  for(curr = 0; curr < size; curr++){
    printf("%d, ", array[curr]);
  }
  printf("\n");
}
 
int maximum(int * array, int size){
 
  int curr = 0;
  int max = 0;
 
  for(curr = 0; curr < size; curr++){
    if(array[curr] > max){ max = array[curr]; }
  }
 
  return max;
}
 
void countingSort(int * array, int size){
 
  int curr = 0;
  int max = maximum(array, size);
  int * counting_array = (int*) calloc(max, sizeof(int)); // Zeros out the array
 
  for(curr = 0; curr < size; curr ++){
    counting_array[array[curr]]++;
  }
 
  int num = 0;
  curr = 0;
 
  while(curr <= size){
    while(counting_array[num] > 0){
      array[curr] = num;
      counting_array[num]--;
      curr++;
      if(curr > size){ break; }
    }
    num++;
  }
  printArray(array, size);
}
 
int main(){
 
  int test1[] = {2, 6, 4, 3, 2, 3, 4, 6, 3, 4, 3, 5, 2, 6};
  int size1 = 14;
  countingSort(test1, size1);
 
 
  int test2[] = {5, 6, 7, 8, 5};
  int size2 = 5;
  countingSort(test2, size2);
 
  
  int test3[] = {8, 1, 2, 3, 3, 4};
  int size3 = 6;
  countingSort(test3, size3);
 
  
  return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.05.2015, 20:22
Ответы с готовыми решениями:

Сортировка двумерного массива (переполнение стека, что делать?)
Вообщем есть такое задание Составить программу сортировки двумерного квадратного массива по...

Переполнение стека
Ребят помогите избавиться от ошибки,вылетает в самом конце программы,программа все считает,все...

Нахождение путей в графе - переполнение стека
Всем доброго времени суток=) У меня возникла проблема с написанием программы которая находит все...

Переполнение стека при выводе содержимого файла
Программа считывает имя файла с входного потока, отображает содержимое файла по 5 симвоов, Не...

2
Dimension
594 / 462 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
11.05.2015, 16:02 2
мне помогает вынос массива за функцию main,то есть объявить массив глобально,моя visual studio позволяет создать массив в 100млн элементов
0
1 / 1 / 1
Регистрация: 27.01.2015
Сообщений: 77
11.05.2015, 17:07  [ТС] 3
Думаю, стоит попробовать также.

Добавлено через 26 минут
Цитата Сообщение от Dimension Посмотреть сообщение
мне помогает вынос массива за функцию main,то есть объявить массив глобально,моя visual studio позволяет создать массив в 100млн элементов
Я как понимаю так? Или нет
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
#include <stdio.h>
#include <stdlib.h>
 
 int test1[] = {2, 6, 4, 3, 2, 3, 4, 6, 3, 4, 3, 5, 2, 6};
 int test2[] = {5, 6, 7, 8, 5};
 int test3[] = {8, 1, 2, 3, 3, 4};
void printArray(int * array, int size){
 
  int curr;
  for(curr = 0; curr < size; curr++){
    printf("%d, ", array[curr]);
  }
  printf("\n");
}
 
int maximum(int * array, int size){
 
  int curr = 0;
  int max = 0;
 
  for(curr = 0; curr < size; curr++){
    if(array[curr] > max){ max = array[curr]; }
  }
 
  return max;
}
 
void countingSort(int * array, int size){
 
  int curr = 0;
  int max = maximum(array, size);
  int * counting_array = (int*) calloc(max, sizeof(int)); // Zeros out the array
 
  for(curr = 0; curr < size; curr ++){
    counting_array[array[curr]]++;
  }
 
  int num = 0;
  curr = 0;
 
  while(curr <= size){
    while(counting_array[num] > 0){
      array[curr] = num;
      counting_array[num]--;
      curr++;
      if(curr > size){ break; }
    }
    num++;
  }
  printArray(array, size);
}
 
int main()
{
 
  
  int size1 = 14;
 
  countingSort(test1, size1);
 
  
  int size2 = 5;
 
  countingSort(test2, size2);
 
  
  int size3 = 6;
 
  countingSort(test3, size3);
 
  return 0;
}
0
11.05.2015, 17:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.05.2015, 17:07
Помогаю со студенческими работами здесь

Переполнение стека при создании трехмерного массива
Нужно создать 2 трехмерных массива: long int mas, mas2; Но при данной записи, при запуске...

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

Сортировка методом Хоара, исправить ошибку (переполнение стека, бесконечный цикл)
Сортировка методом Хоара. Нужно первую четверть рассортировать по убыванию, а всё остальное - по...

Переполнение стека
#include &lt;iostream&gt; using namespace std; int main() { const int n=10; const int m=10; int...


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

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