non merge sort ricorsivo in C ++
Domanda
ho scritto l'intera cosa, ma ottengo gli errori vaghi. Non so che cosa c'è che non va .... ugh.Also, si può chiedere il motivo per cui non ricorsiva bene il mio insegnante ha in questo modo per il test.
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;
}
}
Soluzione
Questo collegamento deve rispondere alle vostre quetsions circa basso verso l'alto merge sort, ma non hanno fornito abbastanza informazioni per facilmente assistervi.
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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow