Nell'apprendimento dell'ordinamento di fusione, gli esempi mostrano l'elenco degli elementi che vengono divisi a metà ancora e ancora e poi nuovamente uniti.
Perché non iniziare semplicemente con un'iterazione sequenziale delle singole coppie di articoli nell'elenco in modo sequenziale se l'azione di divisione iniziale divide sempre l'elenco in singoli singoli elementi?
Capisco che sia un metodo iterativo vs ricorsivo, ma in questo particolare esempio sembra che il passaggio "divide" sembrerà sempre suddividerlo in singoli elementi quindi sono un po 'incerto sul motivo per cui dovremmo dividere anche ricorsivamente quando possiamo dividerlo in singoli elementi in un solo passaggio.
descrizione di merge sort:
The mergeSort function should recursively sort the subarray array[p..r] i.e. after calling mergeSort(array,p,r) the elements from index p to index r of array should be sorted in ascending order.
-If the subarray has size 0 or 1, then it's already sorted, and so nothing needs to be done. -Otherwise, merge sort uses divide-and-conquer to sort the subarray.
Use merge(array, p, q, r) to merge sorted sub arrays array[p..q] and array[q+1..r].
esempio js
var mergeSort = function(array, p, r) {
if (r === p)
{
return array;
}
var q = p + floor((r - p)/2);
mergeSort(array, p, q);
mergeSort(array, q+1, r);
merge(array, p, q, r);
};