2010-10-14 88 views
0

我写了整个东西,但是我得到了模糊的错误。我不知道什么是错的......呃。另外,你可能会问为什么非递归好,我的老师有这样的测试方式。在C++中的非递归mergesort

void nonrec_mergesort(vector <int> & a, vector <int> & b, int s, int r) 
{ 

    int m = 1; 
    while (m <= r) 
    { 
     int i = 0; 
     while(s < (r-m)) 
     { 
      stl_merge(a, b, i, ((i+i+m-1)/2), (i+m-1)); 
      stl_merge(a, b, i+m, (min(i+2*m-1,r-1)+(i+m))/2, min(i+2*m-1,r-1)); 
      s = s + (2*m); 
     } 
     m = m * 2; 
    } 
} 
+4

你不可能得到任何帮助,没有解释你所得到的错误,可能你已经尝试解决这些问题。 – 2010-10-14 23:45:46

+3

一般来说,计算机不会给出模糊的错误,而是非常明确的错误。你在编译过程中遇到错误吗?在链接?在运行你的代码? – 2010-10-14 23:48:58

+0

它运行代码 – 2010-10-14 23:50:47

回答

2

此链接应该回答你的quetsions约自下而上归并排序,但您没有提供足够的信息,以便于为您提供帮助。

http://www.algorithmist.com/index.php/Merge_sort

Input: array a[] indexed from 0 to n-1. 

    m = 1 
    while m <= n do 
     i = 0 
     while i < n-m do 
      merge subarrays a[i..i+m-1] and a[i+m .. min(i+2*m-1,n-1)] in-place. 
      i = i + 2 * m 
     m = m * 2