前些天用java做了一个数组乱序,首先建立快速排序算法,排序的依据是根据序列中随机产生的序列号,序列号利用map保证在每次排序过程中只产生一次:
java 代码
- public static void randomList(List list) {
- Collections.sort(list, new Comparator(){
- HashMap map = new HashMap();
- public int compare(Object v1, Object v2) {
- init(v1);
- init(v2);
-
- double n1 = ((Double)map.get(v1)).doubleValue();
- double n2 = ((Double)map.get(v2)).doubleValue();
- if(n1 > n2)
- return 1;
- else if(n1 < n2)
- return -1;
- return 0;
- }
- private void init(Object v){
- if(map.get(v) == null){
- map.put(v, new Double(Math.random()));
- }
- }
- protected void finalize() throws Throwable {
- map = null;
- }
- });
- }
有没有更好的实现呢,查阅Java API, 才发现:
API实现是向后遍历列表,从最后一个元素一直到第二个元素,将随机选择的元素重复交换到“当前位置”。元素是从列表中随机选择的,从第一个元素运行到当前位置(包括)。
此方法以线性时间运行。而我上面提出的方法将是n*logn
java的Collections中的工具方法shuffle就是这样实现的。
分享到:
相关推荐
java螺旋数组源码java螺旋数组源码java螺旋数组源码
java 部分数组递增排序 java 部分数组递增排序 java 部分数组递增排序
47.java求数组中元素的最大值.zip47.java求数组中元素的最大值.zip47.java求数组中元素的最大值.zip47.java求数组中元素的最大值.zip47.java求数组中元素的最大值.zip47.java求数组中元素的最大值.zip47.java求数组...
java动态数组java动态数组java动态数组java动态数组java动态数组java动态数组java动态数组java动态数组java动态数组java动态数组
写的Java文件中实现了统计数组中相同元素个数的功能以及统计数组中小于某个元素的所有元素的数量功能,非常的实用。
详解java多维数组,提高对java多维数组的理解
Java数组阶段的选择题、填空题、编程题、判断题都有,适合想自己测试下的学生以及准备出题的老师
java中数组的各种用法,工程中以代码的形式,例举java中数组的应用,对初学者有帮助,大鸟就不要看了
使用链式编程写法实现Java中byte数组的拼接。例如byte[] bytes = ByteUtils.get().add(0x41).add(07).add(11).add("15288930000").add(0x45).toArray();更灵活用法请参考Mybytes
树状数组3.java 使用java实现树状数组3.java 使用java实现树状数组3.java 使用java实现树状数组3.java 使用java实现树状数组3.java 使用java实现树状数组3.java 使用java实现树状数组3.java 使用java实现树状数组3....
用动态扩充实现线性表用动态扩充实现线性表
java中用数组为一个类定义多个对象,并对其进行实例化
主要介绍了Java实现字符数组全排列的方法,涉及Java针对字符数组的遍历及排序算法的实现技巧,需要的朋友可以参考下
Educoder题目:Java入门 - 数组进阶答案解析
java 数组递增排序 java 数组递增排序 java 数组递增排序
使用数组构建ATM,采用的是面向对象的设计方法。
java用数组实现的约瑟夫环问题。代码简单易懂。
Java-数组实验.pdf
java数组的介绍以及怎么用,用在什么地方