Wie kann ich den verfügbaren Stapel für ein Programm mit Bloodshed Dev C++ oder Code :: Block richtig erhöhen? Ich führe einfache Blase und schnelle Sortierung, die funktionieren, aber wenn ich den Stapel in Code :: Block änderte (fand heraus, wie über here), machte es mein Programm noch schneller zum Absturz, trotz der Verwendung von viel mehr als vorgeschlagenen Raum. Ursprünglich stürzte das Programm beim Sortieren von 64K zufälliger Ganzzahlen ab (unter Verwendung der rand()
-Funktion). Jetzt stürzt es bei 32K ab. Ich bekomme den Fehler: Process returned -1073741571 (0xC00000FD)
Zunehmender Stapel funktioniert nicht
das Programm läuft tatsächlich schneller ohne den Stapel geändert zu haben, vorausgesetzt, ich mache es richtig. gcc -Wl,--stack,1099511627776
ich kann nicht herausfinden, wie es in Dev C überhaupt ändern ++
Was soll ich tun? Gibt es eine Möglichkeit, den Stack innerhalb des Codes selbst zu ändern? hier ist der Code im für Blase und schnelle Sortierung. Es gibt jeweils zwei: Einer ist mit Vektoren, der andere mit Arrays. Ich denke, dass die Blase sortieren. sollte stimmen. die schnelle Sorte, ich bin mir nicht so sicher. Leider Wenn es ein bisschen chaotisch
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);
}
der Rest des Codes einfach ist Arrays und Vektoren, die mit 32, 64 und 128 k Einträge, Sortieren sie unter Verwendung des obigen Code und Rückführen der Zeit zu erzeugen. dass ein Teil im ziemlich sicher, dass ich vermasselte nicht
mein Haupt ist im Grunde nur
start = clock();
a_quick(array1, 32000);
end = clock();
cout << "\nQuick Sort\tArray\t32000\t" << ((double) end - start)/CLOCKS_PER_SEC << " seconds\n";
immer und immer wieder
Wie haben Sie diese Algorithmen implementiert? Eine korrekte Bubble-Sort-Implementierung sollte nicht rekursiv sein und eine korrekte rekursive Quicksort-Implementierung sollte eine durchschnittliche O (lg n) -Tiefe auf dem Aufruf-Stack erfordern (die Worst-Case-Komplexität ist technisch linear, wenn Sie keine guten Pivot-Werte auswählen oder wirklich haben) perverse Daten).Wenn Ihnen der Platz auf dem Stack mit einem rekursiven Algorithmus ausgeht, ist es am besten, ihn in einer iterativen Form neu zu implementieren oder die Rekursion mit Ihrem eigenen Stack, den Sie auf dem Heap zuordnen können, zu fälschen. –
Ich denke, ich habe Blase richtig sortieren. schnelle Art, die ich gerade gelernt habe, also bin ich mir nicht so sicher. In meinen hw-Anweisungen heißt es ausdrücklich, dass ich den Stack wechseln muss – calccrypto
Es gibt keine Möglichkeit, dass die Funktionen, die Sie anzeigen, dazu führen, dass Ihnen der Speicherplatz auf dem Stack ausgeht. Keiner von ihnen ruft irgendwelche Funktionen auf und keiner von ihnen weist irgendwelche großen Objekte auf dem Stapel zu. –