嗨我想實現一個合併排序的向量,我傳入函數。這裏是我的代碼,它不排序列表,但我不知道什麼是錯的。當我輸出原始矢量和已排序的矢量時,兩者之間存在一些差異,但它仍未排序。實現合併排序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