交换一个数组的左右两部分
题目:交换一个数组的左右两部分
如:arr=[1,2,3,4,5,6,7],sizeL=5,sizeR=2,交换成为arr=[6,7,1,2,3,4,5]
import java.util.Random;
import java.util.Scanner;
public class Code01_ArrayPationExchange {
// 方法一:时间复杂度:O(n),空间复杂度:O(n)
public static int[] fn1(int[] arr, int sizeL, int sizeR) {
System.out.println("方法一:时间复杂度:O(n),空间复杂度:O(n)");
if (sizeL >= arr.length) {
return arr;
}
int[] tmp = new int[arr.length];
int index = 0;
for (int i = sizeL; i < arr.length; i++, index++) {
tmp[index] = arr[i];
}
for (int i = 0; i < sizeL; i++, index++) {
tmp[index] = arr[i];
}
// System.out.println(tmp);
printArr(tmp);
return tmp;
}
// 此运算对于相同值的元素的交换会产生0
public static void swap(int[] arr, int i, int j) {
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
public static void swap2(int[] arr, int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
// 方法二:时间复杂度:O(n),空间复杂度:O(1)
public static int[] fn2(int[] arr, int sizeL, int sizeR) {
System.out.println("方法二:时间复杂度:O(n),空间复杂度:O(1)");
if (sizeL >= arr.length) {
return arr;
}
int index = 0;
while (index < sizeL / 2) {
swap2(arr, index, sizeL - 1 - index);
index++;
}
index = sizeL;
while (index < sizeL + sizeR / 2) {
swap2(arr, index, arr.length - 1 - index + sizeL);
index++;
}
index = 0;
while (index < arr.length / 2) {
swap2(arr, index, arr.length - 1 - index);
index++;
}
printArr(arr);
return arr;
}
public static int[] getArr(int n) {
int[] arr = new int[n];
Random ran = new Random();
for (int i = 0; i < n; i++) {
arr[i] = ran.nextInt(10);
}
// System.out.println(arr);
return arr;
}
public static int[] printArr(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
return arr;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int sizeL = in.nextInt();
int sizeR = n - sizeL;
int[] arr = new int[n];
arr = getArr(n);
int[] arr2 = arr;
printArr(arr);
arr = fn1(arr, sizeL, sizeR);
arr = fn2(arr2, sizeL, sizeR);
// System.out.println(arr);
// printArr(arr);
// printArr(arr2);
}
}