关于随机索引的问题

来源:1-9 作业解析:只创建一个 Random 类

当个废物挺好_66

2020-10-30 22:49:56

老师在优化快排中提到,由于每次partition都需要创建Random对象,可以在 第一个函数创建Random对象,然后作为参数传递,省去了频繁创建对象的步骤,避免耗时,那么直接利用Java提供的Math类产生随机数,会不会更好呢,我在测试数十次过程的这种方法比上诉方法大部分要快那么一丢丢

int p = l + (int)(Math.random() * (r - l + 1)); //(int)(Math.random() * (r - l + 1)产生[0,r-l]范围内的整数
写回答

1回答

liuyubobobo

2020-10-31

可以的,只要不重复创建对象,就没有我在这一小节说的内存开销问题。


但是对于 Java 语言来数,产生随机数,使用 Random 类的 nextInt,是更好的选择。可以参考这里的讨论:https://stackoverflow.com/questions/738629/math-random-versus-random-nextintint


不过这种区别已经超出这个课程讨论的范畴了,在大多数情况下,你的方式没有问题的:)


继续加油!:)

0

算法与数据结构

波波老师5年集大成之作,算法与数据结构系统学习,考试、面试、竞赛通用

2610 学习 · 1087 问题

查看课程