私は宿題としてMergeSortを実装しようとしています。私は入力ベクトルをとるMergeSortという関数を与えられています。次に、私はスプリットとマージ機能が与えられました。ベクトルを分割する際の無限ループ
私はMergeSortの仕組みを知っていますが、私はJavaで複数回実装していますが、私はいつも配列を使用していましたが、ポインタと参照に関して多くの経験はありませんでした。ここで
は、私がこれまで持っているもので、
void Split(const std::vector<int>& input, std::vector<int>* output1, std::vector<int>* output2) {
std::cout << "In split function" << std::endl;
// this just prints the values in my vector
for (int i = 0; i < input.size(); i++) {
std::cout << input[i] << ", ";
}
std::cout << std::endl;
if (input.size() > 1) {
int i = 0;
int j = input.size();
while (i <= j) {
output1->push_back(input[i]);
i++;
if (i != j) {
output2->push_back(input[j]);
j--;
}
}
std::vector<int> left= {};
std::vector<int> right = {};
Split(*output1, &left, &right);
Split(*output2, &left, &right);
}
}
void MergeSort(std::vector<int>* input){
std::vector<int> output1= {};
std::vector<int> output2 = {};
std::cout << "Starting mergesort" << std::endl;
Split(*input, &output1, &output2);
}
はまた、私は私の問題への関連性がないため、含めたくないマージ機能を持っています。
今、私のコードはコンパイルされますが、無限ループに陥ってsegfaultを与えてしまいます。
私は値をマージ関数を呼び出す主な機能を持っている:{3、5、1、2、9、4}分割関数が呼び出され、次にこれがちょうど終了までstdoutに印刷されています:
In split function 3, 5, 1,
は、なぜ私はこのループで立ち往生していますか?
(J = input.size 'と'入力[j]が ')'つによって境界を超えての基本ケースで終了に至る、
output1
配列が実際{3, 5}
を縮小します... –あなたは約1分ステファンで私にそれを打つ。 –