package chapter1; public class Ranksort { /** * 求秩排序 * @param args */ /** * 求秩函数 * 一个序列中的元素的秩(rank)是序列中较小元素的数量加上出现在 * 其左侧的相等元素的数量 */ public static void rank(int[] a, int[] r) { if (r.length < a.length) { throw new IllegalArgumentException("length of rank array cannot be "+ "less than the number of objects"); } for (int i = 0; i < a.length; i++) { r[i] = 0; } for (int i = 1; i < a.length; i++) { for (int j = 0; j < i; j++) { if (a[j] <= a[i]) { r[i]++; } else { r[j]++; } } } } /** * 秩的排序 * @param args */ public static void rearrange(int[] a, int[] r) { int[] u = new int[a.length]; for (int i = 0; i < a.length; i++) { u[r[i]] = a[i]; } for (int i = 0; i < a.length; i++) { a[i] = u[i]; } } public static void main(String[] args) { int a[] = {4, 3, 9, 3, 7}; int r[] = new int[5]; rank(a, r); for (int i : r) { System.out.print(i + " "); } System.out.println(); rearrange(a, r); for (int l : a) { System.out.print(l + " "); } } }