嗨我想实现一个合并排序的向量,我传入函数。这里是我的代码,它不排序列表,但我不知道什么是错的。当我输出原始矢量和已排序的矢量时,两者之间存在一些差异,但它仍未排序。实现合并排序C++
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.6793 71 距离:1.263918 距离:1.575268 距离:0.117904 距离:2.317885 距离:0.899686 距离:3.851347 距离:3.916363 距离:1.513004 距离:0.446430
我把它用'的std ::排序()'是出了问题?如果是这样,那么你可以使用多少标准库,因为如果你可以使用'std :: merge()'或者'std :: inplace_merge()',它是一个简单的算法。 – WhozCraig 2013-03-09 05:07:52
我只是试图在不使用任何库的情况下实现合并排序 – 2013-03-09 05:29:30
然后,您将有一些工作来解开这些'std :: vector <>'s,因为它们位于同一个库中。与此同时,首先编写一个简单的例程,使用迭代器将两个已排序的列表合并到第三个结果列表中。我猜想就地合并的算法现在有点超出你的驾驶室。 – WhozCraig 2013-03-09 05:32:40