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

   有幸拜读了老赵的 一道简单的编程题。在此自己练习一下,以作备忘:

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

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

 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     }

 

posted @ 2009-06-22 09:51  mcjeremy  阅读(8993)  评论(1编辑  收藏  举报
------------------------------------ 心静似高山流水不动,心清若巫峰雾气不沾 ------------------------------------