2016-04-16 19 views
1

Hier ist eine Interviewfrage, die ich hatte.Eine Reihe von Zeichen sortieren

Eingabe: Eine Zeichenkette (ASCII), könnte ein Satz sein. Da kann man düsen. Ausgabe: Sortierte in der Reihenfolge der ASCII-Wert

Erwartete Komplexität: Lineare Zeit und konstanter zusätzlicher Raum

Mein Gedanke eine Art Eimer zu tun, war eine Art, wo Sie eine Größe 256 Array und dann verwenden, aber wenn Du hast dann Duplikate, wie würde das gehandhabt? Würde dies als konstanter Raum betrachtet werden? Ich denke, es wäre, weil Sie nur ein Array mit 256 Größen verwenden würden, und dass es nicht mit der Größe der Eingabe wachsen würde.

Ich möchte nicht den spezifischen Code, wie ich das gerne selbst tun würde, aber alle Hinweise wären hilfreich!

+1

Denken Sie, was der Wert des Arrays sein sollte. (Und Sie brauchen nur die Größe 128 für ASCII ...) –

+1

Oh ok ich sehe. Die Indexposition wäre das Zeichen und der Wert wäre die Zählung. Vielen Dank! –

+1

Es wird eine zählende Sorte sein. Lineare Zeit mit Array mit 128 Größen. –

Antwort

1

Die Lösung für dieses Problem ist counting sort.

Sie hätten ein Array der Größe 128 und alle Werte werden auf 0 initialisiert. Verwenden Sie den Ascii-Wert eines Zeichens, um in das Array zu indizieren, und inkrementieren Sie den Array-Wert.

Die sortierte Sequenz würde nur erzeugt, indem man das Array der Größe 128 durchquert, wo man nur das Zeichen des ASCII-Wertes i ausgibt, wenn Array [i] ungleich Null ist und der Wert die Häufigkeit des zu druckenden Zeichens angibt .

Sie haben Recht, das ist eine konstante Größe O (1) und lineare Zeit O (N) -Algorithmus.

+0

Beachten Sie, dass für ASCII die Array-Größe nur 128, nicht 256 sein muss. ASCII ist eine 7-Bit-Codierung. –

+0

@JonSkeet Wir haben erweiterte Größe ASCII-Zeichensatz. Aber das ist nicht der Punkt. sowieso. –

+0

"Extended ASCII" ist keine spezifische Kodierung und ist meiner Erfahrung nach ein wenig hilfreicher Begriff. Es wäre besser, Ihre Antwort zu editieren, um nicht den Eindruck zu erwecken, dass ASCII 256 Zeichen hat - es gibt viel zu viele Stellen im Netz, die diesen Irrtum bereits verbreiten. –

Verwandte Themen