题解 | #排序(归并排序)#
排序(归并排序)
https://www.nowcoder.com/practice/bc25055fb97e4a0bb564cb4b214ffa92
import java.io.*;
public class Main {
private static int n;
private static final int MAX = 501;
private static int[] arr = new int[MAX];
private static int[] help = new int[MAX];
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
StreamTokenizer in = new StreamTokenizer(bufferedReader);
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
while (in.nextToken() != StreamTokenizer.TT_EOF) {
n = (int) in.nval;
for (int i = 0; i < n; i++) {
in.nextToken();
arr[i] = (int) in.nval;
}
mergeSort(0, n - 1);
for (int i = 0; i < n; i++) {
out.print(arr[i] + " ");
}
out.println();
}
out.flush();
out.close();
}
public static void mergeSort(int l, int r) {
if (l == r) {
return;
}
int mid = (l + r) / 2;
mergeSort(l, mid);
mergeSort(mid + 1, r);
merge(l, mid, r);
}
public static void merge(int l, int mid, int r) {
int a = l, b = mid + 1;
int i = l;
while (a <= mid && b <= r) {
help[i++] = arr[a] < arr[b] ? arr[a++] : arr[b++];
}
while (a <= mid) {
help[i++] = arr[a++];
}
while (b <= r) {
help[i++] = arr[b++];
}
for (int j = l; j <= r; j++) {
arr[j] = help[j];
}
}
}
查看20道真题和解析