【问题标题】:Characters sorting algorithm字符排序算法
【发布时间】:2011-09-16 10:56:10
【问题描述】:

输入:BDCAbaxz

输出:AaBbCDxz

我的解决方案直截了当且丑陋:

  1. 对输入进行快速排序,得到“ABCDabxz”

  2. 分配一个与原始数组大小相同的临时数组,然后从两个子数组(ptr1-->A, ptr2--->a)中取出适当的元素

  3. 将临时数组复制回原来的数组

关于这个问题的任何更快算法?

【问题讨论】:

    标签: c algorithm sorting


    【解决方案1】:

    是的。

    qsort 定义一个比较器,它首先为您提供所需的排序(因此与其使用AB...YZab...yz 作为排序顺序,不如让它强制执行AaBb...YyZz)。

    【讨论】:

    • @Paul: stricmp 排序字符串,而不是字符。并且它认为'A''a' 是相同的,这不会为OP 提供所需的行为。
    • 哦,是的 - 抱歉 - 今天还没有正常醒来...... ;-)
    【解决方案2】:

    如果输入很长(>> 255),您可以进行计数排序。

    char chars[256]; zeroed
    while( *input)  // zero termination
        chars[*input++]++;
    

    然后像这样提取它

    int pos = 0;
    for(int i = 'A'; i<= 'Z'; i++)
    {
        while( chars[i]-- ) 
            output(pos++] = (char)i;
        while( chars[i+'a'-'A']-- )
            output(pos++] = (char)i+'a'-'A';
    }
    

    O(N)

    【讨论】:

      猜你喜欢
      • 2018-08-17
      • 2011-10-21
      • 1970-01-01
      • 1970-01-01
      • 2014-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多