Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 合并排序的标准实现是否优于使用向量编写的实现?_C++_Sorting_Mergesort_Divide And Conquer - Fatal编程技术网

C++ 合并排序的标准实现是否优于使用向量编写的实现?

C++ 合并排序的标准实现是否优于使用向量编写的实现?,c++,sorting,mergesort,divide-and-conquer,C++,Sorting,Mergesort,Divide And Conquer,我正在学习算法,并试图提出自己的合并排序实现。我编写了以下实现 #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(); ve

我正在学习算法,并试图提出自己的合并排序实现。我编写了以下实现

#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;   }
#包括
#包括
#包括
使用名称空间std;
向量合并(向量A、向量B)
{
int n1=A.大小();
int n2=B.大小();
矢量结果;
int i=0;
int j=0;
而(i虽然(我为什么不运行测试?将您的实现与标准实现进行比较并找出答案。好的,对一个20 int长的数组运行了这些测试,我得到了以下结果:我的方法:0.0004s CLRS方法:0.0000s我将近似值设置为1000位,但CLRS方法总是得到0。我想这会使它更好。谢谢您的帮助。)帮帮忙。不客气。虽然我真的不能得到任何荣誉。你做了所有的工作。=;)-请考虑将您的结果形式化为任何未来访问者的答案。测试应该涉及更大的数据库。20个项目是不存在的,其结果受系统状态的影响很大。我建议在一百万个元素的区域中使用数据集,也应多次运行该测试并取平均值。@ NipunGarg,试着在非常大的数组上运行测试,而不是一个20 int长的数组。由于数据量如此小,很多不相关的因素都会起作用。