import java.util.Scanner;
//从大到小排序
public class MergeSort {
static int n;
static int b[];
static int c[];
static boolean flag = true;
public static void main(String[] args) {
System.out.print("你将要输入的个数?: ");
Scanner scan = new Scanner(System.in);
n = scan.nextInt();
b = new int[n];
System.out.print("请输入数字(" + n + "个)-输入非整数结束: ");
Scanner scanner = new Scanner(System.in);
int i = 0;
while (scanner.hasNextInt()) {
if(flag==true){
System.out.print("你输入的顺序: ");
flag = false;
}
int a = scanner.nextInt();
System.out.print(a + " ");
b[i] = a;
i++;
}
System.out.println("");
c = new int[b.length];
int left = 0;
int right = b.length - 1;
mergeSort(b, left, right);
System.out.print("排序后的结果: ");
for (int k = 0; k < n; k++) {
System.out.print(b[k] + " ");
}
}
public static void mergeSort(int a[], int left, int right) {
if (left < right) {
int i = (left + right) / 2;
mergeSort(a, left, i);
mergeSort(a, i + 1, right);
merge(a, c, left, i, right);
copy(a, c, left, right);
}
}
public static void merge(int a[], int b[], int left, int i, int right) {
int j = left, k = i + 1, p = 0;
for (; j <= i && k <= right;) {
if (a[j] > a[k]) {
b[p++] = a[j++];
} else {
b[p++] = a[k++];
}
}
for (; j <= i; p++, j++) {
b[p] = a[j];
}
for (; k <= right;) {
b[p++] = a[k++];
}
}
public static void copy(int a[], int b[], int left, int right) {
for (int i = 0, j = left; j <= right; j++, i++) {
a[j] = b[i];
}
}
}