用C#实现数组反转

小白是公司的初级程序员,最近对工作有了更高的期望,昨天去面试了,回来问小白今天面得怎么样了,有啥难题吗?小白说做笔试题了,除了手写代码的试题,都没有啥难度,其实题目不难,就是手写代码很别扭,老忘记单词,是什么题目呢?给一个数组实现反转。.

    小白也想到到了有现成函数,如果用VS一句代码实现,使用循环的话小白写的有点吃力,最后放弃了。

解惑

    其实这道题面试官主要考察对循环、数据结构和简单算法的使用,如果使用内置函数的话反而不好。我们替小白实现一下:

1、使用内置函数

使用内置函数很简单,一句代码解决:

int[] arr = { 1, 2, 8, 9, 11, 23, 25 };Array.Reverse(arr);//反转函数foreach (var item in arr)    Console.WriteLine(item);//输出:25,23,11,9,8,2,1

2、使用自定义方法

自定义方法可以使用循环替换的方法实现,还可以使用栈先进先出的方式来实现。

循环替换方法:

            int[] arr = { 1, 2, 8, 9, 11, 23, 25 };            int begin = 0;            int end = arr.Length-1;            while (begin < end)            {                int temp = arr[end];//设置临时替换值                arr[end] = arr[begin];//替换                arr[begin] = temp;                 begin++;                 end--;            }            foreach (var item in arr)                Console.WriteLine(item);

使用栈方法:

 int[] arr = { 1, 2, 8, 9, 11, 23, 25 }; Stack<int> intStack = new Stack<int>(); for (int i=0;i <= arr.Length - 1; i++) {     intStack.Push(arr[i]);//加入栈中 } for (int i = 0; i <= arr.Length - 1; i++) {     arr[i] = intStack.Pop();//读取栈 } foreach (var item in arr)     Console.WriteLine(item);

上面只是为了展示效果,小白可以把上面两个自定义的过程封装成方法,传入要转换的开始和结束的下标,并做非空判断,这样一定是加分项。如下

        private void Run(int[] arr, int begin,int end)        {            if(arr==null)                return;//可以输入提示文字            if (begin >= end)                return;//可以输入提示文字            if(end> arr.Length-1)                return;//可以输入提示文字            while (begin < end)            {                int temp = arr[end];                arr[end] = arr[begin];                arr[begin] = temp;                begin++;                end--;            }            foreach (var item in arr)                Console.WriteLine(item);        }

完美

结语

   以上把两个方法都写出来,绝对是满分,小白看到一定很惊奇。希望本文对大家学习和工作有一定参考价值,同时欢迎大家留言讨论,谢谢大家的支持。