给定一个有序数组,把这个数组中所有元素顺序进行颠倒
假定这个数组内的元素是有序的,这样好观察
int[] nums = new int[]{1,2,3,4,5,6,7,8,9,0};
思路是这样的
我们可以先获取数组第一个元素和最后一个元素,让二者交换位置,交换完后索引相应++和–
原顺序
1,2,3,4,5,6,7,8,9,0
第一次交换
0,2,3,4,5,6,7,8,9,1
第二次交换
0,9,3,4,5,6,7,8,2,1
第三次交换
0,9,8,4,5,6,7,3,2,1
第四次交换
0,9,8,7,5,6,4,3,2,1
第五次交换
0,9,8,7,6,5,4,3,2,1
先定义两个int类型数据min和max来充当要交换的元素的下标,也称索引
再定义一个int类型的temp用来缓冲
因为nums.length得到的是数组长度,索引是从0开始,所以要-1
int min = 0;
int max = nums.length - 1;//因为nums.length得到的是数组长度,索引是从0开始,所以要-1
int temp = 0;
将数组遍历,判断min是否小于max,是,则执行下面代码,不是,则停止
1、先将nums[min],也就是第一个元素赋值给temp,nums[min]可以被覆盖
2、nums[min]接收nums[max]数组最大索引处的值
3、nums[max]接收temp的值
4、min++,获取下一个元素;max–,获取上一个元素
5、进入下一次循环
for (int i = 0; i < nums.length; i++) {
if (min < max){
temp = nums[min];
nums[min] = nums[max];
nums[max] = temp;
min++;
max--;
}
}
输出结果
for (int num : nums) {
System.out.print(num + "\t");
}
交换后:0 9 8 7 6 5 4 3 2 1
原顺序:1 2 3 4 5 6 7 8 9 0
这样就完成了交换顺序,下面是源代码
public class Test_10 {
public static void main(String[] args) {
int[] nums = new int[]{1,2,3,4,5,6,7,8,9,0};
int temp = 0;
int min = 0;
int max = nums.length - 1;
for (int i = 0; i < nums.length; i++) {
if (min < max){
temp = nums[min];
nums[min] = nums[max];
nums[max] = temp;
min++;
max--;
}
}
for (int num : nums) {
System.out.print(num + "\t");
}
}
}