黑马程序员技术交流社区

标题: 翻转组数 [打印本页]

作者: 林嘉健    时间: 2013-1-16 20:56
标题: 翻转组数
本帖最后由 林嘉健 于 2013-1-17 12:21 编辑
  1. static void Main(string[] args)
  2.         {
  3.             int[] a = { 1, 2, 3, 4, 5 };
  4.             ReverseArray(a);
  5.             Console.ReadKey();
  6.         }
  7.         public static void ReverseArray(int[] a)
  8.         {
  9.             for (int i = 0; i < a.Length; i++)
  10.             {
  11.                 int temp = a[a.Length - 1 - i];
  12.                 a[a.Length - 1 - i] = a[i];
  13.                 a[i] = temp;
  14.             }
  15.             foreach (int temp in a)
  16.             {
  17.                 Console.WriteLine(temp);
  18.             }
  19.         }
复制代码
代码如上 怎么实现不了呢
作者: 王继光    时间: 2013-1-16 21:15
            for (int i = 0; i < a.Length; i++)

            {

                int temp = a[a.Length - 1 - i];

                a[a.Length - 1 - i] = a[i];

                a[i] = temp;

            }

这里的循环条件 经分析 有问题   比如数组有6个元素  你从 0 -5 开始遍历
0 和 5交换
1 和 4 交换
2 和 3交换
3 和 2交换
4 和 1交换
5和 0 交换

从头执行到结尾  其实经历了2次交换 反转了2次 所以没变  
只需要把循环条件 控制到   <=length/2 就可以了
作者: 高浩    时间: 2013-1-16 21:20
将temp 在for循环的外部声明,其实实现数组的反转,只有搞清楚数组的下角标的变化就很容易解决这种问题的,
还有就是通过第三变量进行两个数的交换,最后不要循环一次声明一次,在外面声明一次就可以了。

作者: jonn    时间: 2013-1-16 21:59
直接画个图,就很清楚了



作者: 朱京辉    时间: 2013-1-16 22:04
其实这个问题调试一下,就可以知道,在交换的三行代码处添加断点,你这个数组很小,直接监视整个数组a也可以,观察数据变化,你会发现你的程序使数组翻转了两次,所以没有变化,学会调试很重要的,试试吧!!!
作者: 王晨    时间: 2013-1-16 22:28
本帖最后由 王晨 于 2013-1-16 22:30 编辑

LZ的意思我没怎么理解,你的意思是将这个数组倒过来显示就行?那这很简单了
代码:
  1. static void Main(string[] args)
  2.         {
  3.       int[] a = { 1, 2, 3, 4, 5 };
  4.       for (int i = a.Length; i >0; i--)
  5.      {
  6.           Console.Write(a[i-1]);
  7.      }
  8.       Console.ReadKey();
  9.         }
复制代码
运行结果如图:


但是要将数组排序时(从大到小或者从小到大输出),可以使用 Array.Sort(),用法如下:
eg:
  1. static void Main(string[] args)
  2. {
  3.       int[] arry = new int[] { 20, 10, 84, 12, 8, 98, 14, 222, 3333 };
  4.           //将其从小到大进行排序,array.sort()用来将数组进行排序
  5.       Array.Sort(arry); //排序后,数组由小到大排列,所以第一个为最小值,最后一个为最大值。
  6.      Console.WriteLine("该数组最小数为" + arry[0]);//最小数为第一个值
  7.      Console.WriteLine("该数组最大数为" + arry[arry.Length - 1]);//最大值为最后一个数
  8.      Console.ReadKey();
复制代码

作者: 林嘉健    时间: 2013-1-17 00:14
还有这么多方法啊。明天我好好看看




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2