2010-10-14 7 views
0

J'ai écrit le tout, mais j'ai des erreurs vagues. Je ne sais pas ce qui ne va pas ... euh. Aussi, vous pouvez vous demander pourquoi bien non-récursif mon professeur l'a fait pour le test.mergesort nonrecursive en C++

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

Vous avez peu de chances d'obtenir de l'aide sans expliquer ce que vous obtenez des erreurs, et peut-être ce que vous avez essayé de les corriger. –

+3

Généralement les ordinateurs ne donnent pas d'erreurs vagues, mais bien définies. Avez-vous des erreurs lors de la compilation? Au cours de la liaison? Pendant l'exécution de votre code? –

+0

il exécutait le code –

Répondre

2

Ce lien devrait répondre à vos questions sur le tri par fusion ascendant, mais vous n'avez pas fourni suffisamment d'informations pour vous aider facilement.

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