我正在学习算法,并试图想出我自己的Merge Sort实现。我写了下面的实现。
#include <cmath>
#include <iostream>
#include <vector>
using namespace std;
vector<int> merge(vector<int> A, vector<int> B)
{
int n1 = A.size();
int n2 = B.size();
vector<int> result;
int i = 0;
int j = 0;
while(i < n1 && j < n2)
{
if(A[i] < B[j])
{
result.push_back(A[i]);
i++;
}
else
{
result.push_back(B[j]);
j++;
}
}
while(i<n1){
result.push_back(A[i]);
i++;
}
while(j<n2){
result.push_back(B[j]);
j++;
}
return result;
}
vector<int> mergeSort(vector<int> M){
int n = M.size();
if (n==1){ return M; }
else {
vector<int> A;
vector<int> B;
int m = floor(n/2);
for(int i = 0; i<m; i++){ A.push_back(M[i]);}
for(int j =m;j<n; j++){ B.push_back(M[j]);}
return merge(mergeSort(A), mergeSort(B));
}
}
int main(){
static const int arr1[] = {5332, 52, -41, 421, 54, 865, 987, 698430, -54670, -5436, 990};
vector<int> A (arr1, arr1 + sizeof(arr1)/sizeof(arr1[0]));
vector<int> C = mergeSort(A);
for(vector<int>::const_iterator i = C.begin();i != C.end(); ++i){ cout << *i << " "; }
cout << "\n";
return 0; }
然后,当我上网查看MergeSort的标准实现时,它与我的大不相同。当他们实现相同的概念时,我使用向量而不是C ++数组,并且我没有在参数中包含数组索引。
我想问的是我的实现是否与标准实现一样好,或者我应该只遵循标准实现?当输入的大小变得更大时,我在效率方面提出要求。