[英]What would be the simplest way to alpha sort an array of chars in C?
我正在寻找一种简单易懂的算法来按字母顺序对C中的字符数组进行排序。
C中的字符具有恰好是按顺序的数字值,因此您只需将字符视为整数即可。 C标准库包含一个“ qsort”功能。 使用它(在类似linux的系统上使用man qsort
)。 您可能必须将大写字母转换为小写字母以简化操作,但这很简单。 如果您想了解quicksort算法(那是您应该学习的算法,因为您将实际使用它),请参阅Wikipedia 。
使用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;
}
如果结果适用于人类,则最好使用strcoll。 它比strcmp或strcasecmp慢,但它说明了非英语字符。 如果要使用它,请不要忘记为LC_COLLATE设置语言环境,即
setlocale(LC_COLLATE,“”);
只需尝试最简单的排序算法“ 冒泡排序”即可 。
简单? 进行气泡排序。
这是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);
}
这是非常简单且渐近最快的(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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.