Как правильно увеличить стек, доступный для программы, использующей Bloodshed Dev C ++ или Code :: Block?Я запускаю простой пузырь и быстро сортирую эту работу, но когда я изменил стек в Code :: Block (узнал, как больше здесь ), это привело к сбою моей программы еще быстрее, несмотря на использование гораздо большего, чем предполагалось, места.Первоначально программа зависала при сортировке 64 КБ случайных целых чисел (используя функцию rand()
).Теперь его сбой на 32K.я получаю сообщение об ошибке: Process returned -1073741571 (0xC00000FD)
программа на самом деле работает быстрее без изменения стека, при условии, что я делаю это правильно.gcc -Wl,--stack,1099511627776
Я не могу понять, как это изменить в Dev C ++
Что мне делать?Есть ли способ изменить стек внутри самого кода?Вот код, который я использую для пузырьковой и быстрой сортировки.их два: один с векторами, другой с массивами.Я думаю, что пузырь типа.должно быть правильно.Быстрая сортировка, я не уверен в этом.извините, если это немного грязно
vector <int> v_bubble(vector <int> array){
// Vector Bubble Sort
if (array.size() < 2){
return array;
}
int s = 1;
while (s){
s = 0;
for (unsigned int x = 0; x < (array.size() - 1); x++){
if (array[x] > array[x + 1]){
int t = array[x];
array[x] = array[x + 1];
array[x + 1] = t;
s = 1;
}
}
}
return array;
}
void a_bubble(int array[], int size){
// Array Bubble Sort
int s = 1;
while (s){
s = 0;
for (int x = 0; x < (size - 1); x++){
if (array[x] > array[x + 1]){
int t = array[x];
array[x] = array[x + 1];
array[x + 1] = t;
s = 1;
}
}
}
}
vector <int> v_quick(vector <int> array){
//Vector Quick Sort
if (array.size() < 2){
return array;
}
vector <int> left;
vector <int> right;
int p_location = array.size() / 2 - 1;
int pivot = array[p_location];
for(unsigned int x = p_location; x < array.size() - 1; x++){
array[x] = array[x + 1];
}
array.pop_back();
for(unsigned int x = 0; x < array.size(); x++){
if (array[x] <= pivot) {
left.push_back(array[x]);
}
else if (array[x] > pivot){
right.push_back(array[x]);
}
}
vector <int> p;
p.push_back(pivot);
return combine(combine(v_quick(left), p), v_quick(right));
}
int a_quick(int array[], int size, int l_index = -1, int r_index = -1){
//Array Quick Sort
if (size < 2){
return array[size];
}
array[size] = array[size];
int left[size];
int right[size];
l_index = 0;
r_index = 0;
int p_location = size / 2 - 1;
int pivot = array[p_location];
for(int x = p_location; x < size - 1; x++){
array[x] = array[x + 1];
}
size--;
for(unsigned int x = 0; x < size; x++){
if (array[x] <= pivot) {
left[l_index] = array[x];
l_index++;
}
else if (array[x] > pivot){
right[r_index] = array[x];
r_index++;
}
}
return a_quick(left, l_index, l_index, r_index) + pivot + a_quick(right, r_index, l_index, r_index);
}
, остальная часть кода просто генерирует массивы и векторы с 32, 64 и 128 тыс. записей, сортирует их с помощью приведенного выше кода и возвращает время.эта часть, я почти уверен, что я не облажался
моя основная часть в основном просто
start = clock();
a_quick(array1, 32000);
end = clock();
cout << "\nQuick Sort\tArray\t32000\t" << ((double) end - start)/CLOCKS_PER_SEC << " seconds\n";
снова и снова