Array.Reverse(string a),在后台使用哪种算法来反转字符串?
发布于 2010-05-29 00:51:47
可能是一种标准的就地反转算法。
函数对i从0到楼层(n/2)的反转就地(a0..n)交换(ai,an-i)
资料来源
发布于 2010-05-29 00:51:55
该算法可能使用了两个指针i和j,它们分别从0和长度-1开始。然后交换位置i和j处的字符(在时间变量的帮助下),i递增,j递减1。重复这些步骤,直到两个指针达到彼此(i≥j)。
在伪代码中:
i := 0;
j := a.length-1;
while (i < j) do
tmp := a[i];
a[i] := a[j];
a[j] := tmp;
i := i+1;
j := j-1;
endwhile;发布于 2010-05-29 01:11:49
根据Reflector的说法,Array.Reverse(Array) (没有字符串变体)首先调用名为TrySZReverse的东西,我找不到它的实现。我假设它是某种经过高度优化的本机方法。
如果失败,它会这样做:
int num = index;
int num2 = (index + length) - 1;
while (num < num2)
{
object obj2 = objArray[num];
objArray[num] = objArray[num2];
objArray[num2] = obj2;
num++;
num2--;
}因此,这是一个就地算法,它交换两端的值,然后反复向内移动。
https://stackoverflow.com/questions/2930886
复制相似问题