【问题标题】:What would be the simplest way to alpha sort an array of chars in C?在 C 中对字符数组进行 alpha 排序的最简单方法是什么?
【发布时间】:2010-09-12 11:11:58
【问题描述】:

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

【问题讨论】:

    标签: c arrays sorting character


    【解决方案1】:

    C 中的字符具有恰好按顺序排列的数值,因此您只需将字符视为整数。 C 标准库包含一个“qsort”函数。使用它(man qsort 在类似 linux 的系统上)。您可能必须将大写字母转换为小写以简化操作,但这很简单。如果您想了解快速排序算法(这是您应该学习的算法,因为您会实际使用它),请参阅Wikipedia

    【讨论】:

      【解决方案2】:

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

      setlocale(LC_COLLATE, "");

      【讨论】:

        【解决方案3】:

        使用 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;
        }
        

        【讨论】:

          【解决方案4】:

          我想知道您是否真的在寻找一种算法或只是一种解决问题的方法?如果是后者,则使用C's qsort

          如果您需要算法,请选择 Insertion sortSelection sort,因为它们非常容易理解。

          【讨论】:

            【解决方案5】:

            试试Bubble Sort,这是最简单的排序算法。

            【讨论】:

            • 永远不要声称算法对于特定任务来说是“最慢的”。一个人总是可以写一个更慢的。 :)
            • 嘿,确实,我会删除“最慢的”。 ;)
            • 恕我直言,插入排序比冒泡排序更容易。
            【解决方案6】:

            容易吗?进行冒泡排序。

            这是 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,我应该用纯 C 实现解决方案。
            【解决方案7】:

            这非常简单且渐近最快(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;
            

            【讨论】:

              猜你喜欢
              • 2014-01-03
              • 2019-08-17
              • 2020-06-01
              • 2011-12-09
              • 2011-06-17
              • 2012-03-05
              • 1970-01-01
              • 1970-01-01
              • 2012-03-13
              相关资源
              最近更新 更多