2
この質問はカップルの前に尋ねられましたが、問題は解決しませんでした。私はVisual Studioでスタックのサイズを増やすことはできません、私は高い入力を取得し、スタックオーバーフローを引き起こす再帰メソッドを使用しています。私はベクトルなど何かを使うことはできません。私が必要とするのは、Visual StudioのC++でスタックサイズを増やすことです。C++でスタックサイズを増やす
P.S.私はVisual Studioの設定からスタックリザーブサイズを増やしましたが、私の問題も解決しません。
void sorting:: MergeSort(int *theArray, int n) {
mergesort(theArray, 0, n - 1);
}
void sorting::mergesort(int *theArray, int first, int last) {
if (first < last) {
int mid = (first + last)/2; // index of midpoint
mergesort(theArray, first, mid);
mergesort(theArray, mid + 1, last);
// merge the two halves
merge(theArray, first, mid, last);
}
} // end mergesort
void sorting::merge(int* theArray, int first, int mid, int last) {
const int max_size = 500000;
int tempArray[max_size];
int first1 = first; // beginning of first subarray
int last1 = mid; // end of first subarray
int first2 = mid + 1; // beginning of second subarray
int last2 = last; // end of second subarray
int index = first1; // next available location in tempArray
for (; (first1 <= last1) && (first2 <= last2); ++index) {
if (theArray[first1] < theArray[first2]) {
tempArray[index] = theArray[first1];
++first1;
}
else {
tempArray[index] = theArray[first2];
++first2;
}
}
// finish off the first subarray, if necessary
for (; first1 <= last1; ++first1, ++index)
tempArray[index] = theArray[first1];
// finish off the second subarray, if necessary
for (; first2 <= last2; ++first2, ++index)
tempArray[index] = theArray[first2];
// copy the result back into the original array
for (index = first; index <= last; ++index)
theArray[index] = tempArray[index];
delete[] tempArray;
} // end merge
そして私の主な機能です。
#include <iostream>
#include <ctime>
#include "sorting.h"
using namespace std;
int main()
{
sorting sort;
int size = 500000;
int *myArr=new int[size];
for (int i = 0; i < size; i++) {
myArr[i] = rand() % size;
}
cout << clock()<<" ";
sort.MergeSort(myArr,size);
cout<<clock();
cin.get();
}
実際にはもっと大きなスタックが必要な場合よりも、アルゴリズムや実装にバグがある確率ははるかに高いです。 – abelenky
アルゴリズムのバグではないかもしれません。時には回帰(たぶんほとんどの場合)は、あなたの問題を解決する最善の方法ではありません。アルゴリズムは何ですか? –
@duDE私はそれを試して、それは動作しません。 –