So sortieren Sie Zahlen mit if-Anweisungen (Java)

8

Ich weiß, dass Sie Zahlen einfach mit einem Array sortieren können, aber meine Aufgabe für die Klasse ist, dass ich vier Zahlen in absteigender Reihenfolge sortieren muss, indem ich if-Anweisungen und keine Arrays .

Hier ist mein Code so weit:

%Vor%

Aus diesem Code bekomme ich die Zahlen in absteigender Reihenfolge, aber es gibt eine Ziffer, die mit einer Null angezeigt wird, damit ich weiß, dass etwas nicht gut läuft.

Beispiel I / O: Wenn 40, 52, 6 und 7000 eingegeben werden, 7000, 0, 40, 6 werden ausgegeben, wenn die erwartete Ausgabe 7000, 52, 40, 6 ist.

Ich bin mir nicht sicher, was ich falsch mache, aber ich würde es gerne wissen, damit ich eine angemessene Note bekommen kann.

Danke.

    
Cody Mathews 11.09.2015, 20:53
quelle

3 Antworten

1

Dies ist eine Möglichkeit, den zweiten Platz zu finden:

%Vor%

Screenshot des Ergebnisses:

    
smoggers 11.09.2015, 21:55
quelle
3

Da bereits eine vollständige Antwort gepostet wurde, ist hier ein weiterer Algorithmus. Bei Verwendung eines Sortiernetzwerks kann dies mit 5 if / swap-Anweisungen geschehen. Dies ist ein c-Codebeispiel für die absteigende Sortierung von 4 Zahlen:

%Vor%

Dieses Beispiel zeigt eine aufsteigende Sortierung von 10 Zahlen:

%Vor%     
rcgldr 11.09.2015 22:28
quelle
1

Ihr Programm scheint den ersten und letzten Ort richtig zu finden. Seine Logik bricht jedoch an dem Punkt, an dem sie den zweiten Platz finden muss.

%Vor%

Sehen wir uns nun ein Beispiel an, in dem die Eingabe 52, 40, 6, 7000 ist.

Also erwarten wir, dass die Zahl, die auf den zweiten Platz geht, 52 ist, die firstNum .

  • Ist firstNum != firstPlace ? Ja, es ist anders als 7000, true .
  • Ist firstNum != fourthPlace ? Ja, es ist anders als 6, true .
  • Ist firstNum < firstPlace ? Ja, es ist kleiner als 7000, true .
  • Ist firstNum > fourthPlace ? Ja, es ist größer als 6, true .
  • Ist firstNum > fourthNum ? Nein, fourthNum ist 7000 und 52 ist nicht größer als das. Also bekommen wir false hier.

Somit ist firstNum nicht als zweiter Platz ausgewählt und Ihr Programm bricht ab.

Die Bedingung für secondNum ist ebenfalls etwas anders gelöst.

Beachten Sie auch, dass einige der Bedingungen redundant sind. Wenn true that firstNum < firstPlace ist, gilt auch firstNum != firstPlace .

Sie können also versuchen, die Logik Ihrer Bedingungen zu korrigieren, oder Sie können einen anderen Algorithmus ausprobieren. Zum Beispiel:

  • Bereiten Sie nur vier Variablen und eine zusätzliche temporäre Variable für das Swapping vor. (Sie tauschen x und y aus, indem Sie temp = x; x = y; y = temp ausführen).
  • Vergleichen Sie die zweite, dritte und vierte Variable jeweils mit der ersten. Wenn einer von ihnen größer als der erste ist, tausche sie damit um. Dies garantiert, dass die erste die größte ist (verstehst du warum?)
  • Vergleiche das dritte und vierte mit dem zweiten auf die gleiche Weise. Jetzt ist garantiert, dass die Sekunde die größte der verbleibenden Zahlen ist.
  • Vergleichen Sie das dritte und vierte miteinander.
RealSkeptic 11.09.2015 21:34
quelle

Tags und Links