描述:
给定一个数列,用归并排序算法把它排成升序。
输入:
第一行是一个整数n(n不大于10000),表示要排序的数的个数;
下面一行是用空格隔开的n个整数。
输出:
输出排序后的数列,每个数字占一行。
输入样例:
5 3 2 1 4 5
输出样例:
1 2 3 4 5
public class MergeSort { private static int arr[]; private static int help[]; public static void main(String[] args) { Scanner cin = new Scanner(System.in); while (cin.hasNext()) { int n = cin.nextInt(); arr = new int[n]; help = new int[n]; for (int i = 0; i < n; i++) { arr[i] = cin.nextInt(); } getSort(0, n - 1); for (int j = 0; j < n; j++) { System.out.println(arr[j]); } } } public static void getSort(int low,int high){ if(low < high){ int mid = (low + high)/2; getSort(low,mid); getSort(mid+1,high); merge(low,high); } } public static void merge(int low, int high) { int mid = (low + high) / 2; int l = low; int m = mid + 1; int i = 0; while (l <= mid && m <= high) { if (arr[l] <= arr[m]) { help[i] = arr[l]; l++; } else { help[i] = arr[m]; m++; } i++; } while(m<=high){ help[i++] = arr[m++]; } while(l<=mid){ help[i++] = arr[l++]; } for (int q = low; q <= high; q++) { arr[q] = help[q - low]; } } }