我正在寻找一种简单、易于理解的算法来按字母顺序对 C 中的字符数组进行排序。
Nano Taboada
问问题
1492 次
7 回答
5
C 中的字符具有恰好按顺序排列的数值,因此您只需将字符视为整数即可。C 标准库包含一个“qsort”函数。使用它(man qsort
在类似 linux 的系统上)。您可能必须将大写字母转换为小写以简化操作,但这很简单。如果您想了解快速排序算法(这是您应该学习的算法,因为您将实际使用它),请参阅Wikipedia。
于 2008-09-23T18:05:12.403 回答
2
使用 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;
}
于 2008-09-23T18:08:23.377 回答
2
如果结果是针对人类的,最好使用 strcoll。它比 strcmp 或 strcasecmp 慢,但它占非英语字符。如果您要使用它,请不要忘记为 LC_COLLATE 设置您的语言环境,即
setlocale(LC_COLLATE, "");
于 2008-09-23T18:20:51.023 回答
1
试试冒泡排序,这是最简单的排序算法。
于 2008-09-23T18:05:21.263 回答
1
我想知道您是否真的在寻找一种算法或只是一种解决问题的方法?如果是后者,则使用C 的 qsort。
如果您需要算法,请选择Insertion sort或Selection sort,因为它们很容易理解。
于 2008-09-23T18:08:40.180 回答
0
简单的?做一个冒泡排序。
这是 java 和 int 而不是 char,但您可以轻松适应它...
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);
}
于 2008-09-23T18:04:36.977 回答
0
这是非常简单且渐近最快的(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;
于 2010-07-26T06:51:43.693 回答