西西河

主题:【原创】如何REVERSE一个C STRING? -- 老成都

共:💬30 🌺11 新:
全看分页树展 · 主题 跟帖
家园 这比用一个临时变量,记住长度效率差多了

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 帖 引用 (帖内工具实现)
全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河