こんにちは、関数に渡すベクトルにマージソートを実装しようとしています。これが私のコードです。リストはソートされませんが、何が問題なのかわかりません。元のベクトルと並べ替えられたベクトルを出力すると、2 つの間にいくつかの違いがありますが、まだ並べ替えられていません。
void BestFit::findBest(){
vector<double> distances;
vector<double> sorted;
distances = getDistance(0);
printDistance(distances);
sorted = sortDistance(distances);
printDistance(sorted);
}
vector<double> BestFit::sortDistance(vector<double> distances){
int mid = distances.size()/2;
vector<double> left;
vector<double> right;
if(distances.size() > 1){
for(int i = 0; i < mid; i++){
left.push_back(distances[i]);
}
for(int i = mid; i < distances.size(); i++){
right.push_back(distances[i]);
}
return sortDistanceHelp(left, right);
}else{
return distances;
}
}
vector<double> BestFit::sortDistanceHelp(vector<double> left, vector<double> right){
vector<double> result;
if(left.size() > 1){
left = sortDistance(left);
}else if(right.size() > 1){
right = sortDistance(right);
}
int count = 0;
int left_count = 0;
int right_count = 0;
while(count < (left.size() + right.size())){
if(left_count < left.size() && right_count < right.size()){
if(left[left_count] <= right[right_count]){
result.push_back(left[left_count]);
left_count++;
}else{
result.push_back(right[right_count]);
right_count++;
}
}else if(left_count < left.size()){
result.push_back(left[left_count]);
left_count++;
}else{
result.push_back(right[right_count]);
right_count++;
}
count++;
}
return result;
}
以下は、ソートされていない距離ベクトルとソートされた距離ベクトルの出力です。
未分類:
距離: 0.679371 距離: 1.263918 距離: 1.575268 距離: 0.117904 距離: 3.851347 距離: 2.317885 距離: 0.899686 距離: 3.916363 距離: 1.513004 距離: 0.446430
並べ替え:
距離: 0.679371 距離: 1.263918 距離: 1.575268 距離: 0.117904 距離: 2.317885 距離: 0.899686 距離: 3.851347 距離: 3.916363 距離: 1.513004 距離: 0.446430