Ich versuche, diese Mergesort-Funktion zum Sortieren eines Vektors oder Wort Nodes (enthält Wortlänge, Anzahl der Vorkommen und das Wort selbst) Es scheint, die Merge-Funktion einmal eingeben, dann das Programm fehlschlägt, irgendwelche Ideen?C++ merge sort wird nicht zusammengeführt?
bool Utility::mergeSort_occurences(vector<Word> &invector){
if (invector.size() <= 1){
return true;
}
vector<Word> left, right;
int middle = (invector.size()/2);
for(int i = 0 ; i < middle ; i++){
left.push_back(invector[i]);
}
for(int i = middle ; i < invector.size() ; i++){
right.push_back(invector[i]);
}
mergeSort_occurences(left);
mergeSort_occurences(right);
invector = mergeOccurences(left, right);
return true;
}
vector<Word> Utility::mergeOccurences(vector<Word> &left, vector<Word> &right){
vector<Word> mergelist;
while(left.size() > 0 || right.size() > 0){
if(left.size() > 0 && right.size() > 0){
if(left[0].getOccurences() <= right[0].getOccurences()){
mergelist.push_back(left[0]);
left.erase(left.begin());
}else{
mergelist.push_back(right[0]);
right.erase(right.erase(right.begin()));
}
}
else if(left.size() > 0){
mergelist.push_back(left[0]);
left.erase(left.begin());
}
else if(right.size() > 0){
mergelist.push_back(right[0]);
right.erase(right.erase(right.begin()));
}
}
return mergelist;
}
Ja - Sie könnten es debuggen. Führen Sie den Code mit Ihrem Debugger mithilfe eines trivial kleinen Datasets in Ihrem Vektor aus. Vier Werte, sagen wir. Es sollte dann relativ einfach sein herauszufinden, wo das Problem liegt, viel einfacher als beispielsweise das Problem zu erkennen, indem man auf eine Seite mit komplexem Vektor/Array-Handhabungscode starrt, der von jemand anderem geschrieben wurde. –