Frage

Ich bin auf der Suche nach einem einfachen, leicht Algorithmus alphabetisch sortiert ein Array von Zeichen in C zu verstehen.

War es hilfreich?

Lösung

Zeichen in C haben numerische Werte, die sein, um passieren, so dass Sie nur Ihre Charaktere wie ganze Zahlen behandeln. die C-Standard-Bibliothek enthält eine ‚qsort‘ -Funktion. Verwenden dass (man qsort auf einem Linux-artiges System). Sie könnten Großbuchstaben in Kleinbuchstaben umwandeln müssen, um die Dinge zu vereinfachen, aber das ist trivial. Wenn Sie den quicksort Algorithmus verstehen wollen (das ist die eine, sollten Sie lernen, weil Sie wirklich verwenden werden) finden Sie unter

Andere Tipps

Wenn das Ergebnis für die Menschen bestimmt ist, ist es besser, strcoll zu verwenden. Es ist langsamer als strcmp oder strcasecmp aber es macht nicht-Englisch-Zeichen. Wenn Sie vorhaben, es zu benutzen, vergessen Sie nicht, Ihren Ort für LC_COLLATE einzustellen, d.

setlocale (LC_COLLATE, "");

Mit der qsort Methode:

#include <stdlib.h>

int char_compare (const void * a, const void * b)
{
  return *(const char *)a - *(const char *)b;
}

int main(){
  const char char_array[] = { 'c', 'a', 'b' };

  qsort (char_array, 3, sizeof(char), char_compare);

  return 0;
}

Versuchen Sie einfach Bubble Sort , dass der einfachste Sortieralgorithmus ist.

Einfach? Führen Sie eine Blase Art.

Dies ist Java und int statt verkohlen, aber man kann es leicht anpassen ...

int[] bubble(int a[])
    {
    for (int i = a.length; --i>=0; )
        {
        for (int j = 0; j<i; j++)
            {
            if (a[j] > a[j+1])
                {
                int T = a[j];
                a[j] = a[j+1];
                a[j+1] = T;
                }
            }
        }
    return(a);
    }

Das ist ziemlich einfach und asymptotisch schnellst (N ist eine Größe von Array):

const unsigned char in[N];
unsigned char out[N], *p=out;
size_t cnt[N]={0}, i, j;
for (i=0; i<COUNT; i++) cnt[in[i]]++;
for (i=0; i<256; i++) for (j=cnt[i]; j; j--) *p++=i;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top