merge1(int low, int high, int S[], U[])
{
int k = (high - low + 1)/2
for q (from low to high) U[q] = S[q]
int j = low
int p = low
int i = low + k
while (j <= low + k - 1) and (i <= high) do
{
if ( U[j] <= U[i] )
{
S[p] := U[j]
j := j+1
}
else
{
S[p] := U[i]
i := i+1
}
p := p+1
}
if (j <= low + k - 1)
{
for q from p to high do
{
S[q] := U[j]
j := j+1
}
}
}
merge_sort1(int low, int high, int S[], U[])
{
if low < high
{
int k := (high - low + 1)/2
merge_sort1(low, low+k-1, S, U)
merge_sort1(low+k, high, S, U)
merge1(low, high, S, U)
}
}
Έτσι, βασικά, αυτό είναι για σημειώσεις διάλεξης μου. Θεωρώ ότι είναι αρκετά συγκεχυμένη σε γενικές γραμμές, αλλά καταλαβαίνω το μεγαλύτερο μέρος της. Αυτό που δεν καταλαβαίνω είναι η ανάγκη του «αν (ι <= χαμηλή + k - 1)» μέρος. Φαίνεται σαν να ελέγχει αν υπάρχουν στοιχεία που «έφυγε» στο αριστερό τμήμα. Είναι ότι ακόμη δυνατό όταν mergesorting;













