import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class 归并排序 {
static int A[] = new int[1 << 20];
static int C[] = new int[1 << 20];
public static void main(String[] args) throws FileNotFoundException {
Scanner cin = new Scanner(
new File(
"E:\\jspWorkspace\\programArithmetic\\src\\com\\supermars\\practice\\in.txt"));
int i = 0;
while (cin.hasNext()) {
A[i++] = cin.nextInt();
}
int l = 0, r = i - 1;
mergerSort(A, l, r);
for (int j = 0; j < i; j++) {
System.out.print(A[j] + " ");
}
}
private static void mergerSort(int[] A, int l, int r) {
if (l != r) {
int mid = (l + r) / 2;
mergerSort(A, l, mid);
mergerSort(A, mid + 1, r);
merger(A, l, mid, r);
}
}
private static void merger(int[] A, int l, int mid, int r) {
int i = l, j = mid + 1, k = 0;
// rear min to front
while (i <= mid && j <= r) {
if (A[i] > A[j]) {
C[k++] = A[j++];
} else {
C[k++] = A[i++];
}
}
// merger arr
while (i <= mid)
C[k++] = A[i++];
while (j <= r)
C[k++] = A[j++];
// copy c to a
for (i = 0; i < k; i++)
A[l + i] = C[i];
}
}
------------------
package com.supermars.practice;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.Scanner;
public class 快速排序 {
// static Scanner cin = new Scanner(new BufferedInputStream(System.in));
static PrintStream cout = System.out;
static int A[] = new int[1 << 20];
static int s[] = new int[2];
public static void main(String[] args) throws FileNotFoundException {
Scanner cin = new Scanner(
new File(
"E:\\jspWorkspace\\programArithmetic\\src\\com\\supermars\\practice\\in.txt"));
int i = 0;
while (cin.hasNext()) {
A[i++] = cin.nextInt();
// System.out.println(cin.nextLine());
}
int l = 0, r = i - 1;
quickSort(A, l, r);
for (int j = 0; j < i; j++) {
System.out.print(A[j]+" ");
}
}
private static void quickSort(int[] A, int l, int r) {
int q[];
if (l < r) {
q = partition(A, l, r);
quickSort(A, l, q[1] - 1);
quickSort(A, q[0] + 1, r);
}
}
private static int[] partition(int[] A, int l, int r) {
int i = l, j = r;
int t = A[i]; // vot
while (i < j) {
while (i < j && A[j] >= t) { // rear to min
j--;
}
if (i < j)
A[i++] = A[j]; // front to max
while (i < j && A[i] <= t) {
i++;
}
if (i < j)
A[j--] = A[i];
}
A[i] = t;
s[0] = i;
s[1] = j;
return s;
}
}