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长的数组。由于数据量如此小,很多不相关的因素都会起作用。