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

用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])

我正在寻找一种简单易懂的算法,用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 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语言来实现这个解决方案。千万不要声称一个算法对于一个特定的任务来说是最慢的。一个人总是可以写慢一点的呵呵,真的,我会去掉“最慢的”;嗯,插入排序比冒泡排序更容易。千万不要说某个算法对于某个特定任务来说是最慢的。一个人总是可以写慢一点的呵呵,真的,我会去掉“最慢的”;插入排序比冒泡排序容易。