.import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class MerAge_sort {
static int n;
static int[] arr;
static int[] temp;
public static void main(String[] args) throws IOException {
//读取数据
final Scanner scanner = new Scanner(System.in);
final BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
n = scanner.nextInt();
arr = new int[n];
temp = new int[n];
final String[] s = bufferedReader.readLine().split(" ");
for(int i = 0; i < n; i++){
arr[i] = Integer.parseInt(s[i]);
}
merge_sort(0, n - 1);
for (int x:arr) {
System.out.printf(x + " ");
}
}
//归并排序
public static void merge_sort(int l,int r){
if(l >= r){
//如果没有元素可排序,直接退出
return;
}
//确定分解点为中间
int mid = l + r >> 1;
//分别排序左边和右边
merge_sort(l,mid);
merge_sort(mid + 1,r);
//进行合并后,k表示已经有几个数,i,j表示两边的边界
int k = 0,i = l,j = mid + 1;
//当元素还未排序完
while(i <= mid && j <= r){
if(arr[i] <= arr[j]){
temp[k++] = arr[i++];
}else{
temp[k++] = arr[j++];
}
}
//元素添加完后接着添加剩下的元素
while(i <= mid){
temp[k++] = arr[i++];
}
while(j <= r){
temp[k++] = arr[j++];
}
//元素返回
for(int x = l,y = 0; x <= r; x++,y++){
arr[x] = temp[y];
}
}
}
你代码里scanner和bufferedreader都是在读取控制台输入,不需要同时使用,使用其中一个就能读取控制台的输入。