您的位置:首页 > 其它

三种数组反转的实现方法备忘

2009-06-22 09:51 225 查看
有幸拜读了老赵的 一道简单的编程题。在此自己练习一下,以作备忘:

<对老赵其中提到的参数校验和异常捕获的介绍感触颇深,有句话叫:细节决定成败。>

<阅读老赵几篇涉及到算法而且又是程序员基础的博文,让我感觉到我的基础真的是不牢固!>

1 public static class ArrayReserve
2 {
3 /// <summary>
4 /// 使用 Array.Reverse(Arrar) 反转全部
5 /// </summary>
6 /// <param name="arr"></param>
7 public static void Reverse1(int[] arr)
8 {
9 Console.WriteLine("使用 Array.Reverse(Arrar) 反转全部");
10 Array.Reverse(arr);
11 }
12 /// <summary>
13 /// 使用 Array.Reverse(Array arr,int begin,int end),反转指定部分
14 /// </summary>
15 /// <param name="arr"></param>
16 /// <param name="begin"></param>
17 /// <param name="end"></param>
18 public static void Reverse2(int[] arr, int begin, int end)
19 {
20 Console.WriteLine("使用 Array.Reverse(Array arr,int begin,int end),反转指定部分");
21 Array.Reverse(arr, begin, end);
22 }
23 /// <summary>
24 /// 使用自定义方法实现反转
25 /// </summary>
26 /// <param name="arr"></param>
27 /// <param name="begin"></param>
28 /// <param name="end"></param>
29 public static void Reverse3(int[] arr, int begin, int end)
30 {
31 Console.WriteLine("使用自定义方法实现反转");
32 if(null==arr)
33 {
34 throw new ArgumentNullException("arr", "Array不能为null");
35 }
36 if(begin<=0 || end <=0)
37 {
38 throw new ArgumentOutOfRangeException("开始或结束索引没有正确设置");
39 }
40 if(end>arr.Length)
41 {
42 throw new ArgumentOutOfRangeException("end", "结束索引超出数组长度");
43 }
44 while(begin<end)
45 {
46 int temp = arr[end];
47 arr[end] = arr[begin];
48 arr[begin] = temp;
49 begin++;
50 end--;
51 }
52 }
53 /// <summary>
54 /// 使用自定义方法实现反转(使用栈《后进先出》)
55 /// </summary>
56 /// <param name="arr"></param>
57 /// <param name="begin"></param>
58 /// <param name="end"></param>
59 public static void Reverse4(int[] arr, int begin, int end)
60 {
61 Console.WriteLine("使用自定义方法实现反转(使用栈《后进先出》)");
62 if (null == arr)
63 {
64 throw new ArgumentNullException("arr", "Array不能为null");
65 }
66 if (begin <= 0 || end <= 0)
67 {
68 throw new ArgumentOutOfRangeException("开始或结束索引没有正确设置");
69 }
70 if (end > arr.Length)
71 {
72 throw new ArgumentOutOfRangeException("end", "结束索引超出数组长度");
73 }
74 Stack<int> intStack = new Stack<int>();
75 int tempBegin = begin;
76 for(;begin<=end;begin++)
77 {
78 intStack.Push(arr[begin]);
79 }
80 for (; tempBegin <= end; tempBegin++)
81 {
82 arr[tempBegin] = intStack.Pop();
83 }
84 }
85 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: