C で文字の配列をアルファソートする最も簡単な方法は何でしょうか?
質問
C で文字の配列をアルファベット順に並べ替える、シンプルで理解しやすいアルゴリズムを探しています。
解決
C の文字にはたまたま順序どおりの数値が含まれているため、文字を整数のように扱うだけです。C 標準ライブラリには「qsort」関数が含まれています。それを使ってください(man qsort
Linux のようなシステム上)。話を単純化するために大文字を小文字に変換する必要があるかもしれませんが、それは簡単なことではありません。クイックソート アルゴリズムを理解したい場合 (実際に使用するため、学習する必要があります)、を参照してください。 ウィキペディア.
他のヒント
結果が人間を対象とする場合は、strcoll を使用することをお勧めします。strcmp や strcasecmp よりも遅くなりますが、英語以外の文字も考慮されます。これを使用する場合は、LC_COLLATE のロケールを設定することを忘れないでください。
setlocale(LC_COLLATE, "");
qsort メソッドを使用します。
#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;
}
ちょうど試して バブルソート それが最も簡単な並べ替えアルゴリズムです。
簡単?バブルソートを実行します。
これは char ではなく java と int ですが、簡単に適応させることができます。
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);
}
これは非常に単純で、漸近的に最速です (N は配列のサイズです)。
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;
所属していません StackOverflow