通过做这道题掌握了两个点:
1.Arrays.sort(int[] a, int a, int b)是对数组a的第a-第b-1个元素进行升序快排;
2.多次处理数组在输入数组时进行处理运行速度更快!
注:对数组进行排序首先考虑Arrays.sort,因为它是快排~
代码:
package lqbTest;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
/*
* 双向排序
*/
public class test02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] ans = new int[n];
for (int i = 0; i < ans.length; i++) {
ans[i] = i+1;
}
int m = scanner.nextInt();
// int[][] a = new int[m][2];
// for (int i = 0; i < m; i++) {
// for (int j = 0; j < 2; j++) {
// a[i][j] = scanner.nextInt();
// }
// }
for (int i = 0; i < m; i++) {
int control = scanner.nextInt();
int index = scanner.nextInt();
if (control == 0) {
//将ans(1)-ans(a[i][1]-1)降序排列
// downSort(ans,a[i][1]);
Arrays.sort(ans, 0, index);
//升序后反转
for (int l = 0, r = index-1; l < r; l++, r--) {
int t = ans[l];
ans[l] = ans[r];
ans[r] = t;
}
}else {
//将ans(a[i][1]-1)-ans(n)升序排列
// upSort(ans,a[i][1]);
Arrays.sort(ans,index-1,ans.length);
}
}
for (int i = 0; i < ans.length; i++) {
System.out.print(ans[i]+" ");
}
}
// private static void downSort(int[] ans, int k) {
// for (int i = 0; i < k; i++) {
// for (int j = 0; j < k - i - 1; j++) {
// if (ans[j] < ans[j+1]) {
// int t = ans[j];
// ans[j] = ans[j+1];
// ans[j+1] = t;
// }
// }
// }
// }
//
// private static void upSort(int[] ans, int k) {
// for (int i = k-1; i < ans.length; i++) {
// for (int j = i; j < ans.length-i; j++) {
// if (ans[j] > ans[j+1]) {
// int t = ans[j];
// ans[j] = ans[j+1];
// ans[j+1] = t;
// }
// }
// }
// }
}