|
|
放置了一些排序使用的子函数
/** * Util.java * * 工具类 * * @author Administrator */public class Util {/** * 对换数组a两个下标i和j对应的值. * * @param a * @param i * @param j */public static void swap(int[] a, int i, int j) {int temp = a[i];a[i] = a[j];a[j] = temp;}/** * 合并数组元素c[l:m]和c[m+1:r]至d[l:r]中. * 前提:c[l:m]和c[m+1:r]必须是有序的 * * @param c * @param d * @param l * @param m * @param r */public static void merge(int[] c, int[] d, int l, int m, int r) {int i = l, j = m + 1, k = l;while ((i <= m) && (j <= r))if (c[i] <= c[j])d[k++] = c[i++];elsed[k++] = c[j++];if (i > m)for (int q = j; q <= r; q++)d[k++] = c[q];elsefor (int q = i; q <= m; q++)d[k++] = c[q];}/** * 把数组元素 b[left:right] 复制到 a[left:right] * 前提假设:a,b数组必须等长. * * @param a * @param b * @param left * @param right */public static void copy(int[] a, int[] b, int left, int right){for(int i = left; i <= right; i ++)a[i] = b[i];}/** * 合并数组x中大小为s的相邻元素到数组y. * * 前提:x,y数组长度相等. * * @param x * @param y * @param s */public static void mergePass(int[] x, int[] y, int s) {int i = 0;int n = x.length;while( n - 2 * s > i) {Util.merge(x, y, i, i + s - 1, i + 2 * s - 1);i += 2*s;}//剩下的元素个数小于2s//元素个数小于2s大于s个if(n - i > s) Util.merge(x, y, i, i + s - 1, n-1);//元素个数小于s个else for(int j = i; j <= n-1; j ++) y[j] = x[j];}public static void main(String[] args){/*int[] c = new int[]{0,2,3,1};int[] d = new int[c.length];merge(c,d,0,2,3);for(int i=0; i<c.length; i++)System.out.println(d[i]);*/System.out.println(1/32);}} |
|