[JAVA] So ersetzen Sie Zeichen, die Sie nicht verstehen [Prinzip]

Die Sortierung der Array-Klasse ist wirklich gut, nicht wahr? Es wird in aufsteigender Reihenfolge ohne Erlaubnis und sogar in absteigender Reihenfolge sortiert.
Ich hatte jedoch Angst, dass ich stecken bleiben würde, wenn ich die Essenz des Sortierens nicht wüsste. Wie man die Sortiermethode nicht benutzt.

Zielcode

public class Change {

    public static void main(String[] args) {
        ListManager data = new ListManager();

        for (int i = 1; i < 100; i++) {
            /*
Die folgenden Werte werden abhängig von dem an signum übergebenen Wert zurückgegeben.
Wenn das Argument größer als Null ist ⇒ 1
Wenn das Argument Null ist ⇒ 0
Wenn das Argument kleiner als Null ist ⇒-1
             */
            int num1 = data.compare(i - 1, i);
            switch (num1) {
                case 1:
                    //Tauschen
                    data.exchange(i - 1, i);
                    //Von hinten ersetzen
                    for (int n = i; n > 0; n--) {
                        int num2 = data.compare(n - 1, n);
                        switch (num2) {
                            case 1:
                                data.exchange(n - 1, n);
                            default:
                                break;
                        }
                    }
                default:
                    break;
            }
        }
        data.checkResult();
    }
}

public class ListManager {
    private int[] dataList;
    private int compareCount;
    private int exchangeCount;

    public ListManager() {
        //Erstellen Sie Daten nach dem Zufallsprinzip
        Random random = new Random();
        dataList = new int[100];
        for (int i = 0; i < dataList.length; i++) {
            dataList[i] = random.nextInt(10000);
        }
    }

    /**
     *Vergleichen Sie zwei Daten
     *
     * @param index1
     * @param index2
     * @return -1:Index1-Daten sind klein, 1:Index2-Daten sind klein, 0:Gleiche Daten
     */
    public int compare(int index1, int index2) {
        compareCount++;
        return (int) Math.signum(dataList[index1] - dataList[index2]);
    }

    /**
     *Tauschen Sie zwei Daten aus
     *
     * @param index1
     * @param index2
     */
    public void exchange(int index1, int index2) {
        exchangeCount++;
        int tmp = dataList[index1];
        dataList[index1] = dataList[index2];
        dataList[index2] = tmp;
    }

    /**
     *Sortierprüfung
     */
    public void checkResult() {
        int data = dataList[0];
        for (int i = 1; i < dataList.length; i++) {
            if (data > dataList[i]) {
                throw new RuntimeException("Unsortiert: [" + (i - 1) + "]=" + data + ", [" + i + "]=" + dataList[i]);
            }
            data = dataList[i];
        }
        System.out.println("OK sortieren:Vergleich=" + compareCount + ",Tauschen=" + exchangeCount);
    }

Ich habe das Gefühl, dass ich nutzlosen Code schreibe, also werde ich ihn reparieren, sobald ich ihn verstehe.

Wenn die Ersetzung beim ersten Switch nicht erfolgt, wird bestätigt, dass der Index in aufsteigender Reihenfolge vor dem Index, den Sie zu diesem Zeitpunkt anzeigen, korrekt angeordnet ist. Bei meinem Code erfolgt die Ersetzung jedoch beim ersten Switch. Ich frage mich, ob es nutzlos ist, weil ich die Reihenfolge vor dem Index überprüfe.

Reicht es aus, die vorherige Bestellung nur zu überprüfen, wenn der Austausch erfolgt?

Ich werde versuchen, es kürzer zu machen.

Recommended Posts

So ersetzen Sie Zeichen, die Sie nicht verstehen [Prinzip]
[Ruby] Wenn Sie mehrere Zeichen ersetzen möchten
So funktioniert @Transactional, das nicht funktioniert, wenn Sie es falsch verwenden
Wie man denkt, wenn man plötzlich etwas über Generika versteht
Verstehst du wirklich So überprüfen Sie die von der App verwendete Bibliothek und Lizenz
Unerwartet unbekannte Java-Zusammenfassung für reservierte Wörter
Bequeme Verwendung von Map, die Sie nicht unerwartet kennen
Umgang mit Elementen, von denen Sie nicht wissen, ob sie in GSON einzeln oder als Array vorliegen
So lösen Sie das Problem, dass Aptana Studio nicht gestartet wird
So lösen Sie VSCode auf: "Build fehlgeschlagen, möchten Sie fortfahren?"
[Swift] So ersetzen Sie mehrere Zeichenfolgen
Wie schreibt man in Scala, die in Java geschrieben wurde? (Liste → Karte)
Wie schreibt man den ternären Operator (? :)
API-basierte Steuerung mit cancancan
Verstehe in 5 Minuten !! Wie man Docker benutzt
Was tun, wenn Sie Gemfile oder .bundle / directory nicht finden konnten?
[Fehler] So beheben Sie das Phänomen, dass der Bildschirm nach der Bearbeitung nicht wechselt
[JavaScript] Der stärkste Fall, als ich versuchte, die Teile zusammenzufassen, die ich nicht verstehe
Android Studio-Memo, in dem Toast-Zeichen in großer Größe angezeigt werden sollen
So erhalten Sie nur Artikel und Transaktionen, die Sie kommentiert oder mit Nachrichten versehen haben [enthält]