2015-09-17 8 views
5

Ich versuche diese Sortierung von hoch nach niedrig zu schreiben und bin mir nicht sicher, wie das geht. Ich bin ziemlich neu beim Sortieren von Algorithmen.Wie man die Sortierung umkehrt sortiere

public void selectionSort(String[ ] data){ 
    // for each position, from 0 up, find the next smallest item 
    // and swap it into place 
    for (int place=0; place<data.length-1; place++){ 
     int minIndex = place; 
     for (int sweep=place+1; sweep<data.length; sweep++){ 
      if (data[sweep].compareTo(data[minIndex]) < 0) 
       minIndex=sweep; 
     } 
     swap(data, place, minIndex); 
    } 
} 

Der Grund, warum ich versuche, es zu ändern, dass die Auswahl hier Art läuft durch den verbleibenden Teil des Feldes, für den Minimalwert suchen und dann tauscht sie die front.I ändern wollen der Algorithmus so, dass er auch im verbleibenden Teil nach dem Maximalwert sucht und ihn nach hinten tauscht, so dass er gleichzeitig eine sortierte Liste von Vorder- und Rückseite aufbaut.

Alle Hilfe geschätzt :)

+1

was meinst du? absteigende Reihenfolge? –

+0

@SleimanJneidi ja, absteigend –

+2

Ich glaube nur ändern - 'if (Daten [Sweep] .CompareTo (Daten [minIndex])> 0)' –

Antwort

2

Sie müssen nur negieren die compareTo Methode

if(data[sweep].compareTo(data[minIndex]) > 0) 
    minIndex=sweep; 
+0

also Es hat nichts mit den Forloops zu tun? –

+0

Nein, alles bleibt gleich, aber anstatt größer als Sie verwenden weniger als –

+0

so das Problem, das ich hier zu beantworten versuche ist, dass der Standard-Algorithmus durch den restlichen Teil des Arrays läuft, auf der Suche nach dem Mindestwert und dann Swaps es nach vorne. Ändere den Algorithmus so, dass er im verbleibenden Teil auch nach dem Maximalwert sucht und ihn nach hinten verschiebt, sodass er gleichzeitig eine sortierte Liste von Vorder- und Rückseite aufbaut. Führt diese Methode das? @SleimanJneidi –

2

A wählen finden sortieren die kleinsten in jeder Iteration verbleibenden Artikel und setzt an der richtigen Stelle. Stattdessen möchten Sie den größten verbleibenden Artikel finden. Die einfachste Möglichkeit besteht darin, die Auswahlbedingung einfach umzukehren. Statt:

if (data[sweep].compareTo(data[minIndex]) < 0) 

sollten Sie verwenden:

if (data[sweep].compareTo(data[minIndex]) > 0) 
+0

Oh okay, ich habe es versucht und ich denke, es funktioniert. Macht es das Sortieren einer ungeordneten Menge langsamer als wenn sie aufsteigt? –

+0

Ich habe eine Methode, die überprüft, ob Array bestellt ist, und es heißt, dass es nicht ist? Ich bin wirklich verwirrt –

+0

@NandaAridianto lassen Sie uns auf eine Frage pro Post halten. Bitte haben Sie einen neuen Post mit dem Code dieser Methode? – Mureinik