Java 自頂向下的歸併排序
阿新 • • 發佈:2018-11-02
package merge; import java.util.Scanner; import java.lang.String; public class Merge { private static Comparable[] aux; public static void sort(Comparable[] a) { aux = new Comparable[a.length]; sort(a, 0, a.length - 1); } public static boolean less(Comparable v, Comparable w) { return v.compareTo(w) < 0; } public static void merge(Comparable[] a, int lo, int mid, int hi) { int i = lo, j = mid + 1; for (int k = lo; k <= hi; k++) { aux[k] = a[k]; } for (int k = lo; k <= hi; k++) { if (i > mid) a[k] = aux[j++]; else if (j > hi) a[k] = aux[i++]; else if (less(aux[j], aux[i])) a[k] = aux[j++]; else a[k] = aux[i++]; } } private static void sort(Comparable[] a, int lo, int hi) { if (hi <= lo) return; int mid = lo + (hi - lo) / 2; sort(a, lo, mid); sort(a, mid + 1, hi); merge(a, lo, mid, hi); } public static boolean isSorted(Comparable[] a) { for (int i = 0; i < a.length; i++) { if (less(a[i], a[i - 1])) return false; } return true; } private static void show(Comparable[] a) { for (int i = 0; i < a.length; i++) System.out.print(a[i] + " "); System.out.println(); } public static void main(String[] args) { Scanner in = new Scanner(System.in); String s = in.nextLine(); String[] str = s.split(" "); sort(str); assert isSorted(str); show(str); } }
輸入資料:h e l l o w o r l d
輸出資料:d e h l l l o o r w