狂奔 lion

自强不息

如何用java做数组乱序?

用java做了一个数组乱序,首先建立快速排序算法,排序的依据是根据序列中随机产生的序列号,序列号利用map保证在每次排序过程中只产生一次,不知道有没有效率更高的方法,大家咚咚脑筋哈

    
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;
            }
        });
    }


 @2008 杨一. 版权所有. 保留所有权利

posted on 2006-08-20 11:58 杨一 阅读(2459) 评论(1)  编辑  收藏 所属分类: Java SE

评论

# re: 如何用java做数组乱序? 2006-08-20 22:53 杨一

一种更聪明的实现是向后遍历列表,从最后一个元素一直到第二个元素,将随机选择的元素重复交换到“当前位置”。元素是从列表中随机选择的,从第一个元素运行到当前位置(包括)。
此方法以线性时间运行。而我上面提出的方法将是n*logn
事实上,java的Collections中的工具方法shuffle就是这样实现的。  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
<2006年8月>
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

公告

本人在blogjava上发表的文章及随笔除特别声明外均为原创或翻译,作品受知识产权法保护并被授权遵从 知识分享协议:署名-非商业性使用-相同方式共享 欢迎转载,请在转载时注明作者姓名(杨一)及出处(www.blogjava.net/yangyi)
/////////////////////////////////////////
我的访问者

常用链接

留言簿(5)

随笔分类(55)

随笔档案(55)

相册

Java

其他技术

生活

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜

自强不息


用心 - 珍惜时间,勇于创造