13 Stimmen

Sortierung eines int-Arrays mit nur 3 Elementen

Ich habe diese Anordnung:

int [] myarray =  {17, 6, 8};

Wie lässt sich dieses Array am besten sortieren (in Pseudocode)?

Danke!

0 Stimmen

sorted(a) mit meinem Pseudo sorted Funktion, die an Ort und Stelle sortiert :)

0 Stimmen

Viele Duplikate, z.B. stackoverflow.com/questions/3319993/

6 Stimmen

Einfach: int [] myarray = {6, 8, 17}; :)

26voto

nan Punkte 18346

Ich denke, das sollte recht schnell gehen (aufsteigende Reihenfolge):

if (el1 > el2) Swap(el1,el2)
if (el2 > el3) Swap(el2,el3)
if (el1 > el2) Swap(el1,el2)

6 Stimmen

Ihre klassische abgerollte Blasen-Sorte :-) +1.

13voto

adamax Punkte 3795

Dieser Code macht im schlimmsten Fall 2 oder 3 Vergleiche und 4 Speichereinträge, im Gegensatz zu einer anderen Antwort (immer 3 Vergleiche und 9 Speichereinträge im schlimmsten Fall).

if a[0] < a[1]:
    if a[1] > a[2]:
        if a[0] < a[2]:
            temp = a[1]
            a[1] = a[2]
            a[2] = temp
        else:
            temp = a[0]
            a[0] = a[2]
            a[2] = a[1]
            a[1] = temp
    else:
        # do nothing
else:
    if a[1] < a[2]:
        if a[0] < a[2]:
            temp = a[0]
            a[0] = a[1]
            a[1] = temp
        else:
            temp = a[0]
            a[0] = a[1]
            a[1] = a[2]
            a[2] = temp
    else:
        temp = a[0]
        a[0] = a[2]
        a[2] = temp

1 Stimmen

Dafür gebe ich dir +1, adamax. Auch wenn es potthässlich zu lesen ist, die Frage hat fragen Sie nach dem Optimum und Ihre scheint das zu erfüllen :-)

0 Stimmen

Ihr Algorithmus liefert ein falsches Ergebnis mit dem Feld {2, 3, 1}.

0 Stimmen

@ionree Sicher, ich habe den Code korrigiert. Wenn Sie einen Blick auf der ursprüngliche Code Sie werden sehen, dass der Ausführungspfad dazu führt, dass zwei Elemente vertauscht werden, während jedes Element verschoben werden muss.

13voto

Eric Grange Punkte 5711

Etwas effizientere Version als die unrolled bubble sort, nicht optimal, aber immer noch recht einfach

if (el1 > el2) Swap(el1, el2)
if (el2 > el3) {
   Swap(el2, el3)
   if (el1 > el2) Swap(el1, el2)
}

0 Stimmen

Ich kann nicht glauben, dass das jemand abgelehnt hat. Es war bei -1. Ich habe es gerade hochgevotet und jetzt steht es bei 0.

6voto

Michael Dorner Punkte 14013

Mai diese Grafik Die Darstellung eines Entscheidungsbaums für die Sortierung von drei Elementen ist hilfreich: enter image description here

0 Stimmen

Aus welchem Buch ist das?

0 Stimmen

Dies ist aus "Grundlegende Algorithmen" ( www14.in.tum.de/~ga ) von Volker Heun -- leider nur auf Deutsch. Eine sehr ähnliche Abbildung findet sich in "Introduction to Algorithms" von Cormen et al.( mitpress.mit.edu/books/einfuehrung-algorithmen ).

1 Stimmen

Ich wusste, dass ich es irgendwo gesehen hatte... vielleicht steht es auch in dem Sedgewick-Buch? Aber für alle anderen, die sich wundern, es steht tatsächlich in CLRS, unter "Sorting in Linear Time". Vielen Dank!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X