`
yangyi
  • 浏览: 112795 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

如何用java做数组乱序?

    博客分类:
  • Java
阅读更多
前些天用java做了一个数组乱序,首先建立快速排序算法,排序的依据是根据序列中随机产生的序列号,序列号利用map保证在每次排序过程中只产生一次:
java 代码
 
  1. public static void randomList(List list) {  
  2.         Collections.sort(list, new Comparator(){  
  3.             HashMap map = new HashMap();  
  4.             public int compare(Object v1, Object v2) {  
  5.                 init(v1);  
  6.                 init(v2);  
  7.                   
  8.                 double n1 = ((Double)map.get(v1)).doubleValue();  
  9.                 double n2 = ((Double)map.get(v2)).doubleValue();  
  10.                 if(n1 > n2)  
  11.                     return 1;  
  12.                 else if(n1 < n2)  
  13.                     return -1;  
  14.                 return 0;  
  15.             }  
  16.             private void init(Object v){  
  17.                 if(map.get(v) == null){  
  18.                     map.put(v, new Double(Math.random()));  
  19.                 }  
  20.             }  
  21.             protected void finalize() throws Throwable {  
  22.                 map = null;  
  23.             }  
  24.         });  
  25.     }  
有没有更好的实现呢,查阅Java API, 才发现:
API实现是向后遍历列表,从最后一个元素一直到第二个元素,将随机选择的元素重复交换到“当前位置”。元素是从列表中随机选择的,从第一个元素运行到当前位置(包括)。
此方法以线性时间运行。而我上面提出的方法将是n*logn
java的Collections中的工具方法shuffle就是这样实现的。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics