当前位置: 代码迷 >> J2SE >> 论坛看见的数组排序算法(不懂),该怎么解决
  详细解决方案

论坛看见的数组排序算法(不懂),该怎么解决

热度:34   发布时间:2016-04-24 12:25:32.0
论坛看见的数组排序算法(不懂)
Java code
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;      }

他们的算法俺看不懂 高手帮解释下
int[] arrays = {1,2,5,8,45,3,71,64};
我用上面的数组测试回报java.lang.ArrayIndexOutOfBoundsException 
求解
具体的那个帖子找不到了.....

------解决方案--------------------
Java code
    /**     * 建立一新数组,以数组的下标表示原数组的值,以数组的值,表示这个数的个数:     * 如下: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]),     */
  相关解决方案