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
求解
具体的那个帖子找不到了.....
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
求解
具体的那个帖子找不到了.....
解决方案 »
- 对数组进行降序排列的API有哪些
- JNI中调用OCX方法问题,急!
- 如何用java的正则得到String变量中\符号出现的次数
- 急需!(IBM JDK1.5或IBM JDK 5.0)
- JDK与JAVA SDK有什么区别
- int、Integer,"=="和equals()辨别?
- 求高手点拨一个“Java Socket项目本地双笔记本测试”的异常问题解决.
- 我写的APPLET传到网上后,在我机器上浏览就行,在别人的机器上除了一片灰之外就出不来!
- 关于下载的问题
- 如何把日期型转为整型?
- java删除文件失败问题....................................................................
- ButtonGroup不管用呢
论坛就那么几个帖子,大部分都问xxx算法,进去一看都TM纯数学问题,我x
for (i = 0; i < LEN;) {
temp[nums[i++]]++;
}这句是干嘛?这里直接越界了
/**
* 建立一新数组,以数组的下标表示原数组的值,以数组的值,表示这个数的个数:
* 如下: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]),
*/