Wie werden ganze Zahlen in aufsteigender Reihenfolge ohne Strings oder Arrays sortiert?

8

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.

    
klayveR 28.11.2015, 12:19
quelle

7 Antworten

6

Es gibt einen sehr einfachen Algorithmus, der nur ganze Zahlen verwendet:

%Vor%

Es wird 1123447 ausgedruckt. Die Idee ist einfach:

  1. Sie nehmen die aktuelle Ziffer der Nummer, die Sie sortieren möchten (nennen wir sie N)
  2. Sie gehen durch alle Ziffern in bereits sortierter Nummer (nennen wir es S)
  3. Wenn die aktuelle Ziffer in S kleiner als die aktuelle Ziffer in N ist, fügen Sie einfach die Ziffer an der aktuellen Stelle in S ein. Andernfalls gehen Sie einfach zur nächsten Ziffer in S.

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.

    
Timofey 28.11.2015, 12:57
quelle
8

Es sind 4 Zeilen, basierend auf einer for loop-Variante Ihrer while-Schleife mit ein wenig Java 8 spice:

%Vor%     
Bohemian 28.11.2015 14:57
quelle
2

Ich nehme an, dass Sie Hashing verwenden dürfen.

%Vor%     
tharindu_DG 28.11.2015 13:26
quelle
2

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):

  1. Holen Sie sich die letzte Ziffer der Nummer mit (digit = number% 10)
  2. Teilen Sie die Nummer so auf, dass die letzte Ziffer weg ist (Zahl / = 10)
  3. Durchlaufen Sie die Ziffern der Nummer (die keine Ziffer hat) und prüfen Sie, ob die Ziffer am kleinsten ist
  4. Wenn eine neue, kleinere Ziffer gefunden wird, dann ersetzen Sie die Ziffer = kleinste Ziffer und suchen Sie bis Ende
  5. Am Ende der Schleife haben Sie die kleinste Ziffer gefunden, speichern Sie sie (store = (store * 10) + digit
  6. )
  7. Nun, da Sie wissen, dass dies die kleinste Ziffer ist, entfernen Sie diese Ziffer von der Nummer und führen Sie die obigen Schritte weiter auf die Restnummer und jedes Mal, wenn eine kleinere Ziffer gefunden wird, fügen Sie sie dem Geschäft hinzu und entfernen Sie die Ziffer von der Nummer (wenn die Ziffer wiederholt wird in der Anzahl, dann entfernen Sie sie alle und fügen Sie sie zum Speicher hinzu)

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%     
Raf 28.11.2015 12:52
quelle
1

Mein Algorithmus dafür:

%Vor%     
Abbas 25.10.2016 13:33
quelle
1

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.
...

    
Raimund Krämer 14.11.2017 10:19
quelle
0

Hier ist die einfache Lösung:

%Vor%     
Pushparaj Dhole 30.01.2017 08:41
quelle

Tags und Links