【发布时间】:2011-09-16 10:56:10
【问题描述】:
输入:BDCAbaxz
输出:AaBbCDxz
我的解决方案直截了当且丑陋:
对输入进行快速排序,得到“ABCDabxz”
分配一个与原始数组大小相同的临时数组,然后从两个子数组(ptr1-->A, ptr2--->a)中取出适当的元素
将临时数组复制回原来的数组
关于这个问题的任何更快算法?
【问题讨论】:
输入:BDCAbaxz
输出:AaBbCDxz
我的解决方案直截了当且丑陋:
对输入进行快速排序,得到“ABCDabxz”
分配一个与原始数组大小相同的临时数组,然后从两个子数组(ptr1-->A, ptr2--->a)中取出适当的元素
将临时数组复制回原来的数组
关于这个问题的任何更快算法?
【问题讨论】:
是的。
为qsort 定义一个比较器,它首先为您提供所需的排序(因此与其使用AB...YZab...yz 作为排序顺序,不如让它强制执行AaBb...YyZz)。
【讨论】:
stricmp 排序字符串,而不是字符。并且它认为'A' 和'a' 是相同的,这不会为OP 提供所需的行为。
如果输入很长(>> 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)
【讨论】: