用C对字符数组进行alpha排序的最简单方法是什么?
我正在寻找一种简单易懂的算法,用C语言按字母顺序对字符数组进行排序。容易吗?做一个气泡排序 这是java和int而不是char,但是您可以很容易地调整它用C对字符数组进行alpha排序的最简单方法是什么?,c,arrays,sorting,character,C,Arrays,Sorting,Character,我正在寻找一种简单易懂的算法,用C语言按字母顺序对字符数组进行排序。容易吗?做一个气泡排序 这是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[] 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);
}
容易吗?做一个气泡排序 这是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);
}
C中的字符的数值恰好是按顺序排列的,所以您只需将字符视为整数。C标准库包含一个“qsort”函数。在类似linux的系统上使用man qsort。您可能需要将大写字母转换为小写字母以简化事情,但这并不重要。如果您想了解快速排序算法,这是您应该学习的,因为您将实际使用它,请参阅。C中的字符有顺序排列的数值,因此您只需将字符视为整数。C标准库包含一个“qsort”函数。在类似linux的系统上使用man qsort。您可能需要将大写字母转换为小写字母以简化事情,但这并不重要。如果您想了解您应该学习的快速排序算法,因为您将实际使用它,请参阅。试试这是最简单的排序算法。试试这是最简单的排序算法。使用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;
}
使用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;
}
我想知道你是真的在寻找一种算法还是仅仅是一种解决问题的方法?如果是后者,则使用
如果你想要一个算法,那就选择或,因为它们很容易理解。我想知道你是真的在寻找一个算法还是仅仅是一种解决问题的方法?如果是后者,则使用
如果你想要一个算法,选择or,因为它们很容易理解。如果结果是针对人类的,最好使用strcoll。它比strcmp或strcasecmp慢,但它考虑了非英语字符。如果您要使用它,请不要忘记为LC_COLLATE设置您的区域设置,即
setlocaleLC_COLLATE 如果结果是针对人类的,最好使用strcoll。它比strcmp或strcasecmp慢,但它考虑了非英语字符。如果您要使用它,请不要忘记为LC_COLLATE设置您的区域设置,即
setlocaleLC_COLLATE 这非常简单,渐近最快的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;
这非常简单,渐近最快的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;
当然,如果你想要简单,你可以选择插入排序或选择排序,而不是冒泡排序?谢谢,但我不能使用Java,我应该用纯C实现解决方案。如果你想要简单,你可以选择插入排序或选择排序,而不是冒泡排序?谢谢,但我不能使用Java,我应该用普通的C语言来实现这个解决方案。千万不要声称一个算法对于一个特定的任务来说是最慢的。一个人总是可以写慢一点的呵呵,真的,我会去掉“最慢的”;嗯,插入排序比冒泡排序更容易。千万不要说某个算法对于某个特定任务来说是最慢的。一个人总是可以写慢一点的呵呵,真的,我会去掉“最慢的”;插入排序比冒泡排序容易。