Ich versuche, die Ziffern einer Ganzzahl beliebiger Länge in aufsteigender Reihenfolge zu sortieren, ohne Strings, Arrays oder Rekursion zu verwenden.
Beispiel:
%Vor%Ich habe bereits herausgefunden, wie man jede Ziffer der ganzen Zahl mit der Modul-Division erhält:
%Vor%aber ich weiß nicht, wie man die Ziffern ohne ein Array anordnet.
Mach dir keine Sorgen über die Klasse IO
; Es ist eine benutzerdefinierte Klasse, die uns unser Professor gegeben hat.
Es gibt einen sehr einfachen Algorithmus, der nur ganze Zahlen verwendet:
%Vor% Es wird 1123447
ausgedruckt.
Die Idee ist einfach:
Diese Version des Algorithmus kann in asc in desc-Ordnungen sortieren, Sie müssen nur die Bedingung ändern.
Außerdem schlage ich vor, dass Sie sich die so genannte Radix-Sortierung ansehen, die Lösung hier nimmt einige Ideen von Radix sort, und ich denke, die Radix-Sortierung ist der allgemeine Fall für diese Lösung.
Wie man eine Nummer ohne Verwendung von Array, String oder Sortier-API sortiert? Nun, Sie können eine Nummer mit folgenden einfachen Schritten sortieren (wenn zu viel zu lesen ist, dann sehen Sie sich die Debugging-Ausgabe an, um eine Vorstellung davon zu bekommen, wie die Sortierung durchgeführt wird):
Ich habe einen Code mit zwei While-Schleifen in der Hauptmethode und einer Funktion bereitgestellt. Die Funktion tut nichts anderes als, erstellt eine neue ganze Zahl ohne die Ziffer, die übergeben wird, zum Beispiel übergebe ich die Funktion 451567 und 1 und die Funktion gibt mir 45567 zurück (in beliebiger Reihenfolge, egal). Wenn diese Funktion an 451567 und 5 übergeben wird, findet sie 5 Ziffern in der Anzahl und fügt sie zum Speichern hinzu und gibt die Nummer ohne 5 Ziffern zurück (dies vermeidet zusätzliche Verarbeitung).
Debuggen, um zu wissen, wie die Ganzzahl sortiert wird:
Die letzte Ziffer ist: 7 der Nummer: 451567
Subchunk ist 45156
Subchunk ist 4515
Subchunk ist 451
Subchunk ist 45
Subchunk ist 4
Smalled digit in 451567 ist 1
Store ist: 1
Entferne 1 von 451567
Reduzierte Anzahl ist: 76554
Die letzte Ziffer ist: 4 der Nummer: 76554
Subchunk ist 7655
Subchunk ist 765
Subchunk ist 76
Subchunk ist 7
Smalled digit in 76554 ist 4
Store ist: 14
Entfernen Sie 4 von 76554
Reduzierte Anzahl ist: 5567
Die letzte Ziffer ist: 7 der Nummer: 5567
Subchunk ist 556
Subchunk ist 55
Subchunk ist 5
Smalled digit in 5567 ist 5
Store ist: 145
Remove 5 from 5567
Wiederholte min Ziffer 5 gefunden. Shop ist: 145
Wiederholte min. Ziffer 5 zum Speichern hinzugefügt. Aktualisierte Geschäft ist: 1455
Reduzierte Anzahl ist: 76
Die letzte Ziffer ist: 6 der Nummer: 76
Subchunk ist 7
Smalled digit in 76 ist 6
Shop ist: 14556
Entferne 6 von 76
Reduzierte Anzahl ist: 7
Die letzte Ziffer ist: 7 der Nummer: 7
Smalled digit in 7 ist 7
Shop ist: 145567
Entfernen Sie 7 von 7
Reduzierte Anzahl ist: 0
Aufsteigende Reihenfolge von 451567 ist 145567
Der Beispielcode lautet wie folgt:
%Vor%Hinzufügen eines sehr einfachen Algorithmus, der keine Datenstrukturen oder komplizierte Mathematik benötigt wie die anderen.
%Vor% In Worten:
1. Drucken Sie eine 0 für jede 0 in der Nummer.
2. Drucken Sie eine 1 für jede 1 in der Nummer.
...