Der Algorithmus zur merge sort istwird dieser Teil des Codes in der Zusammenführungsart ausgeführt?
Schritt 1 - wenn es nur ein Element in der Liste ist es bereits sortiert wird, kehren. Schritt 2 - teilen Sie die Liste rekursiv in zwei Hälften, bis sie nicht mehr geteilt werden können. Schritt 3 - Zusammenführen der kleineren Listen in neue Liste in sortierter Reihenfolge.
mit diesem psedu Code:
procedure mergesort(var a as array)
if (n == 1) return a
var l1 as array = a[0] ... a[n/2]
var l2 as array = a[n/2+1] ... a[n]
l1 = mergesort(l1)
l2 = mergesort(l2)
return merge(l1, l2)
end procedure
procedure merge(var a as array, var b as array)
var c as array
while (a and b have elements)
if (a[0] > b[0])
add b[0] to the end of c
remove b[0] from b
else
add a[0] to the end of c
remove a[0] from a
end if
end while
while (a has elements)
add a[0] to the end of c
remove a[0] from a
end while
while (b has elements)
add b[0] to the end of c
remove b[0] from b
end while
return c
end procedure
meine Frage ist:
in der merge Funktion gibt es zwei while-Schleife zu überprüfen, ob a
und b
noch Teile vorhanden sind und das Hinzufügen von ihnen zum c
Array.
meine Frage ist Willen (könnten) diese zwei while in der gleichen Funktion ausgeführt werden?
oder wie wenn a
noch Elemente haben, das bedeutet b
ist definitiv leer und umgekehrt?
Warum Leute, die du bist minuse mich? –