发布时间:2024-01-31 19:00
操作类型和参数:
操作类型:决定是升序还是降序
参数:从下标多少开始升序或者降序
如果是降序的话:
从数组第一个元素到数组第参数个元素的位置进行降序
如果是升序的话:
从数组中第参数个元素到数组最后一位元素进行升序
代码如下:
package Example02;
import java.util.Arrays;
import java.util.Scanner;
public class 双向排序 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//接收序列的长度和操作次数
int length = sc.nextInt();
int count = sc.nextInt();
//初始化序列
int[] arr = new int[length];
for(int i = 0; i < arr.length; i++) {
arr[i] = i+1;
}
//操作几次,循环几次
for(int i = 0; i < count; i++) {
int p = sc.nextInt(); //操作类型
int index = sc.nextInt(); //操作参数
//p == 0 降序操作
if(p == 0) {
//先把这几个元素升序操作
//从0到这个操作参数升序操作
Arrays.sort(arr,0,index);
//再降序操作
/**
* 这里就是把最后一位和第一位的值切换,然后第一位往后走
* 最后一位往前走
*/
//最后一位的下标
int end = index -1;
//first是第一位的小标。当first == end的时候,结束循环
for(int first = 0; first < end; first++) {
//切换元素
int temp = 0;
temp = arr[first];
arr[first] = arr[end];
arr[end] = temp;
//最后一位往前走一位
end--;
}
}else if(p == 1){
//p = 1时升序操作
//[index-1,length)
Arrays.sort(arr,index-1,length);
}
}
//遍历输出
for(int i = 0 ; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
}