**一、算法思想**
交换数组中第一个数与最后一个数,第二个数与倒数第二个数,直至开始索引和末尾索引指向相同位置。
如图所示:
**二、初步算法代码(少量偶然数据)**
注:随便的定义一个长度为5的数组,逆序之后结果是正确的。
代码:
class NiXv{
public static void main(String[] args){
int[] a={3,4,5,6,9};
System.out.println("初始数组:");
print(a);
reverse(a);
System.out.println("逆序数组:");
print(a);
}
public static void reverse(int[] a){
for(int i=0;i<a.length/2;i++){
int start=i;
int end=a.length-1-i;
if(start==end){
break;}
int temp=a[start];
a[start]=a[end];
a[end]=temp; }
}
public static void print(int[] a){
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");}
System.out.println();
}
}
**三、另一个代码,开辟了偶数长度内存int[] a=new int[20]**
注:还是以上的代码,只修改了内存大小,开辟空间不同,int[] a=new int[20],执行程序会发现数组逆序没有实现,逆序前后的数值是相同的。
原因:开辟的数组的长度为偶数,逆序的时候折半查找,写的是i<a.length,这样的话, 当程序走到折半中间的时候,不能满足条件if(start==end),那么就会继续走剩下的后面的部分,结果就会是逆序又逆序,还是最初的数组。
所以:算法原理是折半查找,交换,那么条件直接写为i<a.length/2即可。
**四、完善代码如下 **
class Reverse{
public static void main(String[] args){
int[] a=new int[11];
fuZhi(a);
System.out.println("初始数组:");
print(a);
reverse(a);
System.out.println("逆序数组:");
print(a);
}
public static void fuZhi(int[] a){
for(int i=0;i<a.length/2;i++){
a[i]=(int)(Math.random()*20);
}
}
public static void reverse(int[] a){
for(int i=0;i<a.length/2;i++){
int start=i;
int end=a.length-1-i;
if(start==end){
break;
}
int temp=a[start];
a[start]=a[end];
a[end]=temp;
}
}
public static void print(int[] a){
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
System.out.println();
}
}