在C中对字符数组进行alpha排序的最简单方法是什么?

我正在寻找一种简单易懂的算法,按字母顺序对C中的字符数组进行排序。

C中的字符具有恰好按顺序排列的数值,因此您只需将字符视为整数即可。 C标准库包含’qsort’function。 使用它( man qsort在类似linux的系统上)。 您可能必须将大写字母转换为小写以简化操作,但这是微不足道的。 如果你想了解快速排序算法(那是你应该学习的算法,因为你实际上会使用它),请参阅维基百科 。

如果结果是针对人类的,最好使用strcoll。 它比strcmp或strcasecmp慢,但它占非英文字符。 如果您打算使用它,请不要忘记为LC_COLLATE设置您的语言环境,即

setlocale(LC_COLLATE,“”);

使用qsort方法:

 #include  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; } 

我想知道你是在寻找算法还是只是解决问题的方法? 如果是后者,则使用C的qsort 。

如果你想要一个算法,请选择插入排序或选择排序 ,因为它们很容易理解。

试试冒泡排序 ,这是最简单的排序算法。

简单? 做泡泡排序。

这是java和int而不是char,但你可以很容易地适应它…

 int[] bubble(int a[]) { for (int i = a.length; --i>=0; ) { for (int j = 0; 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