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