如何在不使用Array.Reverse()方法的情况下反转数组(在C#中)?
例如,
int[] arr = {1,3,4,9,8};
// some code here
Console.WriteLine(string.Join(",", arr));应该会导致
8,9,4,3,1这是我的面试任务。
发布于 2011-05-22 21:46:34
在问题中替换// some code here的代码是:
for (int i = 0; i < arr.Length / 2; i++)
{
   int tmp = arr[i];
   arr[i] = arr[arr.Length - i - 1];
   arr[arr.Length - i - 1] = tmp;
}您应该只迭代数组的前半部分(arr.Length / 2)。如果遍历整个数组(arr.Length),它将颠倒两次,得到与开始之前相同的元素顺序。
发布于 2017-03-30 00:03:39
基本上,您需要重新实现Array.Reverse(Array)。如果你看看implemented in the framework本身,忽略了周围的许多技术细节,你会发现它只是在整个数组上调用它的三参数版本(反转数组的指定部分)。
Array.Reverse(Array,Int32,Int32)是一个while循环,它交换元素并维护两个索引:
i指向反转部分的第一个元素,andj指向反转部分的最后一个元素。重写以替换问题中的// some code here:
int i = 0;
int j = arr.Length - 1;
while (i < j)
{
    var temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
    i++;
    j--;
}这比the implementation using for-loop更容易掌握,做的算术更少,并且通过双重回归优雅地避开了陷阱。
发布于 2016-08-18 17:12:54
for (int i = 0; i < array.Length - i; i++)
 {
   var value = array[array.Length - i - 1];
   array[array.Length - i - 1] = array[i];
   array[i] = value;
 }https://stackoverflow.com/questions/6088287
复制相似问题