1

我一直将用于反转字符串的 c 代码实现为:

  1. 循环 I 直到字符串的长度或长度的一半
  2. 将指针放在字符串的末尾和开头
  3. 一一交换。

但我想要一个优化的代码来降低这个问题的时间复杂度,除了我提到的那个。我尝试了谷歌搜索,但没有找到任何相关的解决方案。

4

2 回答 2

4

如果通过“时间复杂度”您指的是排除系数和低阶项的大 O 表示法,那么您将无法击败简单的 O(n) 算法来反转 C 字符串。

如果您指的是特定机器(或机器类别)执行操作所需的时间,则有多种方法可以优化反转。典型的优化包括循环展开、逐个机器而不是逐个字符地使用字符,以及对终止 NUL 字符的智能搜索。免费提供的 GNU libc 包含此类优化的示例

上面的一些优化,比如循环展开,可以通过优化编译器自动实现。其他可能在某些平台上适得其反,或者它们的加速取决于字符串的大小。在某些情况下,手写优化会阻碍编译器自己优化代码的努力。确保您不会让事情变得更糟的唯一方法是开发一个涵盖您预期用途的基准测试,并随着您的进展仔细地对您的代码进行基准测试。

于 2012-11-15T17:48:14.780 回答
0
for(fctr=0,bctr=len-1;fctr<len/2;fctr++,bctr--)
{ 
    temp=str[fctr];
    str[fctr]=str[bctr];
    str[bctr]=temp;
}

这可能会很快奏效!

于 2013-01-26T15:14:14.423 回答