在讲解数组的逆序之前,我们需要了解这么一个需求,就是如何完成数组元素的交换。
假设我们现在有一个数组:
int[] arr = {0,1};
如果我现在打印arr[0] 得到的结果肯定是0,打印arr[1] 得到的元素肯定是1, 那么我们现在的需求是将数组中的两个元素做一下交换,也就是我希望打印arr[0] 得到的是1,打印arr[1] 得到的是0.
那么这个需求我们应该如何实现呢,这就好像我们要把一杯可乐和一杯雪碧做一个交换,我们需要借助一个空杯子。我们我们定义一个临时的变量temp来充当这个空杯子,然后把可乐倒进空杯子,把雪碧倒进可乐的杯子,再把原来空杯子中的可乐到回到雪碧的杯子中。我们现在是要将arr[0] 和arr[1] 做一个交换, 这就好像是我们前面说的可乐和雪碧,代码如下:
int temp = arr[0]; //将可乐倒入空杯子
arr[0] = arr[1]; //将雪碧倒入已经空了的可乐杯子
arr[1] = temp;//在将原来空杯子中的可乐导入到已经空了的雪碧杯子
好了,就这样简单的三部,我们就已经完成了上面的需求。好了那么现在我们要做的是这么一件事,将一个数组中的所有元素完成逆序,注意并不是逆序打印,而是真正做到将数组中的所有元素翻转一下。那么应该怎么做
假设我们现在有一个数组 ,里面有5个元素{1,2,3,4,5},我们要做一个逆序,其实就是得到一个新的数组{5,4,3,2,1};通过对比可以发现,我们只需要将第一个元素1和最后一个元素5, 第二个元素2和倒数第二个元素4做一下交换就可以完成这个需求。
那么5个元素的数组。我们总共需要交换2次,中间的元素3是不需要动的。而对于如果是6个元素的数组呢,总共需要交换3次。所以我们其实可以找到一个规律,就是任意一个元素要想实现逆序,需要交换的次数是 arr.length/2 次。这其实也是我们写的循环语句需要执行的次数。好,那么接下来我们只需要找到是哪两个元素交换就可以了。假设我们设置一个for循环
for(int i=0;i<arr.length/2;i++){}
这正是数组要交换的次数,当i=0的时候,是第一个元素arr[0] 和最后一个元素 arr[arr.length-] 做交换。 arr[arr.length-1]这个元素大家应该可以看懂吧,数组的索引是从0开始的,所以数组中的最后一个元素的索引是arr.length-1;当i=1的时候,是arr[1] 和arr[arr.length-1-1];做交换。当i=2是,是arr[2] 和arr[arr.length-1-2]做交换 。索引我们可以找到规律,其实就是arr[i] 和arr[arr.length-1-i]做交换。这时候代码就比较好写了。
for(int i=0;i<arr.length/2;i++){
int temp = arr[i];
arr[i] = arr[arr.length-1-i];
arr[arr.lentgh-1-i] = temp;
}
对于数组的逆序,其实还有另一种写法,大家可以研究研究,如果有看不懂的,可以在文章下留言。
for(int start=0,end = arr.length-1;start<end;start++,end--){
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}