首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不使用Array.Reverse()反转数组

不使用Array.Reverse()反转数组
EN

Stack Overflow用户
提问于 2011-05-22 21:41:00
回答 24查看 102.4K关注 0票数 23

如何在不使用Array.Reverse()方法的情况下反转数组(在C#中)?

例如,

代码语言:javascript
运行
复制
int[] arr = {1,3,4,9,8};
// some code here
Console.WriteLine(string.Join(",", arr));

应该会导致

代码语言:javascript
运行
复制
8,9,4,3,1

这是我的面试任务。

EN

回答 24

Stack Overflow用户

回答已采纳

发布于 2011-05-22 21:46:34

在问题中替换// some code here的代码是:

代码语言:javascript
运行
复制
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),它将颠倒两次,得到与开始之前相同的元素顺序。

票数 55
EN

Stack Overflow用户

发布于 2017-03-30 00:03:39

基本上,您需要重新实现Array.Reverse(Array)。如果你看看implemented in the framework本身,忽略了周围的许多技术细节,你会发现它只是在整个数组上调用它的三参数版本(反转数组的指定部分)。

Array.Reverse(Array,Int32,Int32)是一个while循环,它交换元素并维护两个索引:

  1. i指向反转部分的第一个元素,and
  2. j指向反转部分的最后一个元素。

重写以替换问题中的// some code here

代码语言:javascript
运行
复制
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更容易掌握,做的算术更少,并且通过双重回归优雅地避开了陷阱。

票数 13
EN

Stack Overflow用户

发布于 2016-08-18 17:12:54

代码语言:javascript
运行
复制
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;
 }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6088287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档