-2
這是我使用C++中的向量合併排序的代碼。但它扔我怪異的結果:爲什麼我在C++中的merge_sort不起作用?
結果:
投入要素:11 33 12 44個99個34個
排序元素:11 33 33 44 99 99
我的頭文件沒什麼特別的:「stdafx.h」
#pragma once
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
#include <iostream>
using namespace std;
代碼:
#include "stdafx.h"
#include <iostream>
#include<array>
#include<vector>
//#define array_size(array) (sizeof((array))/sizeof((array[0])))
using namespace std;
template <typename T>
void merge_sort(vector<T>& arr, vector<T>& arr1, vector<T>& arr2) {
arr.clear();
int i = 0, j = 0, k = 0;
for (i = 0; i < arr1.size() && j < arr2.size(); k++) {
if (arr1.at(i) <= arr2.at(j)) {
arr.push_back(arr1.at(i));
i++;
}
else if (arr1.at(i) > arr2.at(j)) {
arr.push_back(arr1.at(j));
j++;
}
k++;
}
while (i < arr1.size()) {
arr.push_back(arr1.at(i));
i++;
}
while (j < arr2.size()) {
arr.push_back(arr2.at(j));
j++;
}
};
template <typename T>
vector<T>merge(std::vector<T>& arr) {
if (1 < arr.size()) {
vector<T> arr1(arr.begin(), arr.begin() + arr.size()/2);
merge(arr1);//dividing to size 1
std::vector<T> arr2(arr.begin() + arr.size()/2, arr.end());
merge(arr2);
merge_sort(arr, arr1, arr2);
}
return (arr);
//write_vector(arr);
};
int main()
{
//Merge Sort
vector<int> inputVec;
int size = 6;
for (int i = 0; i < size; i++) {
int input;
cin >> input;
inputVec.push_back(input);
}
vector<int>& newSort=merge(inputVec);
vector<int>::iterator it;
for (it = newSort.begin(); it != newSort.end(); ++it)
cout<<endl<< *it << endl;
return 0;
}
結果窗口: My Output 能有人請指出什麼是錯的?爲什麼它會創建重複元素?
這聽起來像你可能需要學習如何使用調試器來逐步通過你的代碼。使用一個好的調試器,您可以逐行執行您的程序,並查看它與您期望的偏離的位置。如果你打算做任何編程,這是一個重要的工具。深入閱讀:** [如何調試小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver
'arr.push_back(arr1.at( j));'是錯的。 –
'vector&newSort = merge(inputVec);'MS VS?這是非法的C++代碼。 –
Slava