Merge Sort的标准实现是否优于使用向量编写的实现?

时间:2014-04-25 12:01:01

标签: c++ sorting mergesort divide-and-conquer

我正在学习算法,并试图想出我自己的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 ++数组,并且我没有在参数中包含数组索引。

我想问的是我的实现是否与标准实现一样好,或者我应该只遵循标准实现?当输入的大小变得更大时,我在效率方面提出要求。

0 个答案:

没有答案