2016-04-16 15 views
0

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?

+0

Warum Leute, die du bist minuse mich? –

Antwort

1

Nein. Wenn beide immer noch nicht leer wären, wäre die erste Bedingung wahr gewesen.

Nachdem der erste während beendet hat, zumindest eines von A, B leer ist.

Verwandte Themen