Řazení slučováním: Porovnání verzí

Smazaný obsah Přidaný obsah
→‎Srovnání s ostatními řadicími algoritmy: Jenom takove doplneni, odlisny, rychlejsi kod. Ten puvodni kod naprosto zbytecne rozdeluje puvodni pole. Treba se na to divat tak, ze pole jiz rozdelene je na serazene array o 1 prvku. A jedine, co zbyva,
Verze 15044058 uživatele 2001:718:2601:26C:4DBC:3838:5A25:F2E0 (diskuse) zrušena
značka: možný vandalismus
Řádek 111:
 
Pro řazení na sekvenčních mědiích se používají jiné algoritmy založené na slučování seřazených (pod)posloupností, které se ale nepovažují za Mergesort.
 
--- Pozn. Peter. ---
 
'Kromě toho je Mergesort ve většině případů pomalejší než [[quicksort]] nebo [[heapsort]].'
 
Nesmysl. Pouzivate zastaraly kod, ktery dela i to, co delat nemusi. Vsechny jednotlive cisla jsou serazene a pak je jen spojujete do vetsich a vetsich poli. Funkce pak vrati ukazatel na pamet, kde je serazene pole. Takze je to obvykle stejne rychle jako Quicksort. Vyhodou je, ze pocet cmp operaci je ale nizsi.<syntaxhighlight lang="js">
function sortListMerge_2a(cmp) // list merging
{
var step, stepmax, tmp, a,b,c, i,j,k, m,n, cycles;
var start = typeof(start)=='undefined' ? 0 : start;
var end = typeof(end) =='undefined' ? arr[1].length : end;
if (end>3)
{
stepmax = ((end - start + 1) >> 1) << 1;
m = 1;
n = 2;
for (step=1;step<stepmax;step<<=1) //bounds 1-1, 2-2, 4-4, 8-8...
{
a = start;
while (a<end)
{
b = a + step;
c = a + step + step;
b = b<end ? b : end;
c = c<end ? c : end;
i = a;
j = b;
k = i;
while (i<b && j<c)
{
if (cmp(arr[m][i],arr[m][j])>0)
{arr[n][k] = arr[m][j]; j++; k++;}
else {arr[n][k] = arr[m][i]; i++; k++;}
}
while (i<b)
{arr[n][k] = arr[m][i]; i++; k++;}
while (j<c)
{arr[n][k] = arr[m][j]; j++; k++;}
a = c;
}
tmp = m; m = n; n = tmp;
}
return m;
}
else
{
// sort 3 items
sort10(cmp);
return m;
}
}
 
</syntaxhighlight>
 
== Externí odkazy ==