数组逆置可以应用到数组循环左移中。
比如,将数组循环左移p个元素,可以先将整个数组逆置,再将前n-p个元素逆置,最后将后p个元素逆置
package pac1;
public class Demo1 {
/**
* @param args
* 将数组循环左移p个位置
* 思路:先将整个数组逆置,再将前n-p个元素逆置,后p个元素也逆置
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int [] arr={1,2,3,4,5,6,7};
int p=3;
int n=arr.length;
reverse(arr,0,n-1);
reverse(arr,0,n-p-1);
reverse(arr,n-p,n-1);
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
}
//将数组中的元素逆置
public static void reverse(int [] arr,int s,int t){
int tm;
int len=t-s+1;
for(int i=s;i<s+len/2;i++){
tm=arr[i];
arr[i]=arr[len+s-i-1+s];
arr[len+s-i-1+s]=tm;
}
}
}
reverse写为下面方法更容易懂:
public static void reverse2(int [] arr,int s,int t){
int tm,k=s,j=t;
while(k<j){
tm=arr[k];
arr[k]=arr[j];
arr[j]=tm;
k++;
j--;
}
}