主题:【原创】如何REVERSE一个C STRING? -- 老成都
void reverse(char *p)
{
int cnt = 0;
// calculate length
while (p[cnt] != 0) ++cnt;
while ((cnt>>1) > 0)
{
// switch first and the last
*p ^= p[cnt-1] ^= *p ^=p[cnt-1];
p++;
// cuz p moved forward, we have to minus 2
cnt -= 2;
}
}
您老看看,算长度,n, 交换位置1/2n,总共O(n)。只用一个临时变量。
递归算法,
1)要是N很大,stack就爆掉了,
2)而且每次调用函数,必须push ebp,调整ebp,压入参数,还要记住retern addr, jump回来,clean stack。浪费无数。
3)时间复杂度上,递归算法是O(n^2)
就为省一个临时变量。
现实生活中,谁要这么写程序,真可以直接fire了。出这种题的也应该fire,纯粹误导。
本帖一共被 1 帖 引用 (帖内工具实现)
- 相关回复 上下关系8
😮有那么高吗?n平方吧?我的倒是指数增长的 林小筑 字0 2007-03-29 14:13:22
🙂递归解法 2 泰让 字91 2007-02-18 18:47:22
🙂code出来了,谢谢帮忙,CODE在内, 3 老成都 字357 2007-02-18 19:45:37
🙂这比用一个临时变量,记住长度效率差多了
😂这道明显是brain teaser,又不是编程题,限制条件列得 1 林小筑 字222 2007-03-29 19:18:22
🙂花一个!问题是俺们这些老蓝领反应已经很慢了, 1 老成都 字241 2007-03-29 19:32:53
🙂把 int cnt 换成 char *end, 然后 1 tingsanguo 字64 2007-03-29 18:58:41
🙂有道理!花 无斋主人 字31 2007-03-29 19:09:45