日期:2014-05-20 浏览次数:20746 次
public class TT { public static void main(String[] args) { int MAX = 100000; int[] nums = new int[MAX]; Random r = new Random(20080623); for (int i = 0; i < MAX; i++) { nums[i] = r.nextInt(MAX); } long begin = System.currentTimeMillis(); // sort_sagezk2(nums); sort_scf37(nums); long end = System.currentTimeMillis(); System.out.println((end - begin)); } public static int[] sort_sagezk2(int[] nums) { final int LEN = nums.length; int i, j, t, p; int[] temp = new int[LEN]; for (i = 0; i < LEN;) { temp[nums[i++]]++; } for (i = 0, p = 0; i < LEN; ++i) { if ((t = temp[i]) == 0) continue; for (j = 0; j < t; ++j) { nums[p++] = i; } } return nums; }
/** * 建立一新数组,以数组的下标表示原数组的值,以数组的值,表示这个数的个数: * 如下:num {0,2,2,1,5,4} * 通过遍历num生成新数组为 * temp{1,1,2,0,1,1} * 表示: * 0:1个 * 1:1个 * 2:2个 * 3:0个 * 4:1个 * 5:1个 * 其实这时候排序已经完成, * 再遍历temp,从根据个数0,1,2,3,4,5中挑数, * 为 * 0,1,2,2,4,5 * 因为新数组的长度和原数组相同, * 代码中又用到了temp[nums[i++]] * 所以数组中的最大数不能大于nums.length-1或者temp的长度也可以定义了max(nums[i]), */