我想實現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);
}
我也有我不希望包括因爲它不相關的我的問題是合併函數。
現在,我的代碼編譯,但它陷入了一個無限循環,並給我一個段錯誤。
我有一個調用與所述值的歸併功能的主要功能:{3,5,1,2,9,4}
Split函數被調用,則這只是印刷到stdout直至終止:
In split function 3, 5, 1,
爲什麼我被陷在這個循環?
'輸入[J]基礎情況''與J = input.size()'由一個超過界限... –
你用1分鐘Stephan打敗了我。 –