(资料图片)
1、两种归并排序算法的实现:二路归并排序和基本归并排序(虚拟消除递归的二路归并排序)#define ARRAY_SIZE 1024int B[1024]; //使用一个全局变量,避免归并排序中每次都重新申请和释放空间造成的开销template void Merge(T A[], int l, int m, int h){ int i = l; int j = m+1; int k = 0; while(i<=m&&j<=h) { if(A[i]void MergeSort(T a[], int l, int h){ int m = (h+l)/2; if(l>=h) { return; } if(l+1==h) { if(a[l]>a[h]) { std::swap(a[l], a[h]); } return; } MergeSort(a, l, m); MergeSort(a, m+1, h); Merge(a, l, m, h);}//将a经过步长s归并到b中,n表示数组的大小template void Merge2(T a[], T b[], int s, int n){ int m = 0; //从头至尾按照步长s进行相邻数据的合并 for(int i=0; i
2、//基本归并排序的时间性能稍微好一点,基本归并排序直接对数据按步长Merge,//而二路归并排序需要将数据先不断的分层。
3、到为一个或者两个元素时再进行Mergevoid main(){ int * p = new int[ARRAY_SIZE]; int i = 0; for(i=0; i
本文到此分享完毕,希望对大家有所帮助。