`

【转】java随机排列数组

    博客分类:
  • java
阅读更多

转自:http://blog.csdn.net/liangjianyong/article/details/4941365

java随机排列数组

有时我们需要随机的排列数组中的元素,随机排列数组,目前常用的有两种方法,第一种就是元素A[i]对应一个优先级P[i],根据优先级作 为键值来从新排序数组;第二种方法就是A[i]随机的跟A[i]到A[n]中的任意个元素进行交换,n为数组的长度,下面是用java实现一个简单实现.

  1. import java.util.Date;  
  2. import java.util.Random;  
  3. /*  
  4.  * 随即排列数组,给定一个数组,随即排列其中的元素,目前主要有两种方法  
  5.  */   
  6. public   class  RandomSort {  
  7.       
  8.     public   static   void  main(String args[]){  
  9.         int  data[]= new   int []{1,42,51,62,8,94,23,13,40,5};  
  10.         //int p[]=getRandom(1,-8,100);   
  11.         //show(p);   
  12.         show(data);  
  13.         permuteBySort(data);  
  14.         show(data);  
  15.         randomizeInPlace(data);  
  16.         show(data);  
  17.     }  
  18.       
  19.     /*  
  20.      * 随机排列数组,使用优先级方式,每个数组元素A[i] 对应一个优先级P[i],  
  21.      * 然后依据优先级对数组进行排序  
  22.      */   
  23.     private   static   void  permuteBySort( int [] data)  
  24.     {  
  25.         int  len=data.length;  
  26.         int  len3=len*len*len;  
  27.         int  P[]=getRandom(1,len3,len);  
  28.           
  29.         //冒泡排序   
  30.         for ( int  i=len-1; i>0; i--)  
  31.         {  
  32.             for ( int  j=0; j<i ; j++)  
  33.             {  
  34.                 if (P[j]>P[j+1])  
  35.                 {  
  36.                     int  temp=data[j];  
  37.                     data[j]=data[j+1];  
  38.                     data[j+1]=temp;  
  39.                       
  40.                     temp=P[j];  
  41.                     P[j]=P[j+1];  
  42.                     P[j+1]=temp;                      
  43.                 }  
  44.             }  
  45.         }  
  46.     }  
  47.     /*  
  48.      * 元素A[i]是从 元素A[i]到A[n]中随机选取的  
  49.      */   
  50.     private   static   void  randomizeInPlace( int [] data)  
  51.     {  
  52.         Date dt=new  Date();  
  53.         Random random=new  Random(dt.getSeconds());  
  54.         int  len=data.length;  
  55.         for ( int  i=0; i<len; i++)  
  56.         {  
  57.             int  pos=( int )(random.nextDouble()*(len-i+1)+i)-1;  
  58.             int  temp=data[i];  
  59.             data[i]=data[pos];  
  60.             data[pos]=temp;  
  61.         }  
  62.     }  
  63.       
  64.     /*  
  65.      * 获得在a到b之间的n个随机数  
  66.      */   
  67.     private   static   int [] getRandom( int  a, int  b, int  n)  
  68.     {  
  69.         if (a>b)  
  70.         {  
  71.             int  temp=a;  
  72.             a=b;  
  73.             b=temp;  
  74.         }  
  75.           
  76.         Date dt=new  Date();  
  77.         Random random=new  Random(dt.getSeconds());  
  78.         int  res[]= new   int [n];  
  79.         for ( int  i=0; i<n; i++)  
  80.         {  
  81.                 res[i]=(int )(random.nextDouble()*(Math.abs(b-a)+1))+a;  
  82.         }  
  83.         return  res;  
  84.     }  
  85.       
  86.       
  87.     private   static   void  show( int [] data)  
  88.     {  
  89.         System.out .println( "========================" );  
  90.         for ( int  i = 0; i < data.length; i++)  
  91.         {  
  92.             System.out .print(data[i] +  "    " );  
  93.         }  
  94.         System.out .println();  
  95.         System.out .println( "========================" );  
  96.     }  

分享到:
评论

相关推荐

    从n个数组中取出所有排列组合(Java实现)

    总结来说,从n个数组中取出所有排列组合的Java实现涉及到递归算法、回溯法以及数据结构的操作。理解这些概念并能够熟练运用是成为一名优秀程序员的关键。通过这个例子,我们可以看到如何利用Java的灵活性和表达力来...

    用Java动态数组扩充实现线性表

    在计算机科学中,线性表是一种基本的数据结构,它由若干个...在实际编程中,我们可以根据需求选择适合的数据结构,如在需要快速随机访问且对插入、删除速度要求不高的场景下,动态数组实现的线性表是一个不错的选择。

    4种思路随机乱序输出数组元素

    这是一种更通用且高效的随机排列数组元素的算法,适用于原地操作。它从最后一个元素开始,依次向前选择未确定位置的元素,与一个随机元素交换。代码如下: ```java int[] array = {...}; // 初始化数组 Random ...

    JAVA随机打乱数组顺序的方法

    在Java编程中,有时我们需要对数组的元素进行随机排列,以实现各种功能,例如模拟洗牌、测试等。本文将详细讲解如何使用Java实现数组的随机打乱顺序,并结合给出的示例代码进行分析。 首先,我们要理解的是,打乱...

    使用PopupWindow实现随机排列的自定义密码键盘 .

    可以使用Fisher-Yates(Knuth)洗牌算法,为按钮数组或列表中的元素生成一个新的随机排列。在Android中,这可以通过`java.util.Random`类实现。随机排列后的顺序可以用来设置按钮的顺序或者作为按钮点击事件的依据。...

    手机端随机排列,适用大部分APP

    2. Fisher-Yates(Knuth)洗牌算法:这是一种常用的随机排列算法,它在线性时间复杂度内完成对数组的随机排列。该算法的基本思想是从最后一个元素开始,依次与前面的元素进行随机交换,直到第一个元素。 3. 递归或...

    Java实现简单的成语消消乐(动态数组)

    在本项目中,"Java实现简单的成语消消乐(动态数组)"是一个旨在教授初学者如何使用Java编程语言创建一个类似“成语消消乐”的游戏。这个项目涉及到几个关键的编程概念,包括动态数组、数据存储、随机数生成、输入/...

    比较Java数组和各种List的性能小结

    在Java编程中,数组和List接口的实现(如ArrayList、LinkedList和Vector)是两种常见的数据结构,它们各自具有不同的特点和性能。这篇文章将探讨这些结构在随机访问、迭代、插入和删除操作上的性能差异。 首先,...

    Java中数组实例---冒泡排序.pdf

    这个例子展示了如何在Java中使用冒泡排序对一个长度为10的随机数组进行升序排列。通过外层循环控制轮数,内层循环实现两两比较和交换,以及一个标志位判断是否提前结束排序,从而实现了冒泡排序算法的基本功能。

    suanfa.rar_Java随机算法

    3. **随机选择与随机排列**:在算法中,随机选择数组或集合中的元素,或者进行随机排列,可以使用`nextInt()`生成索引来实现。例如,`Collections.shuffle()`方法就利用了`Random`进行随机排列。 4. **随机抽样**:...

    Java处理排序后的数组比没有排序的快.docx

    排序后的数组具有了顺序性,即元素按一定顺序排列。 ```java Arrays.sort(arr); ``` 对于排序后的数组,我们进行一个简单的操作,比如累加数组中所有大于等于128的元素值。这个操作在执行时,由于数组是有序的,...

    Javascript从数组中随机取出不同元素的两种方法

    这样,每次迭代后,数组中的元素位置都是随机的,最终形成一个随机排列。 示例代码如下: ```javascript // 随机化原数组 function shuffle(array) { var m = array.length, t, i; // 如果还剩有元素… while ...

    java各种数组排序(插入,交换,选择,归类,基数排序).pdf

    - `createArray()` 方法用于生成随机测试数组,其中包含正负数。 - `printArray()` 方法用于打印数组元素到控制台,方便观察排序结果。 - `swap()` 方法用于交换数组中两个指定位置的元素。 - `bubbleSort()` ...

    Java中打乱一个数组的2种公平算法分享

    本篇文章将介绍两种公平的算法来实现这一功能,确保数组元素被随机且均匀地重新排列。公平算法意味着每个元素在打乱后都有相等的概率出现在数组的任何位置。 ### 1. 洗牌程序原理 洗牌程序的灵感来源于实际生活中...

    java各种数组排序(插入,交换,选择,归类,基数排序).docx

    ### Java 数组排序知识点 #### 排序算法的分类及适用场景 在计算机科学中,排序算法是一项重要的技术,用于对数据集进行有序排列。排序算法可以分为多种类型,每种都有其特定的应用场景和效率特点。根据文档提供的...

    java源码包---java 源码 大量 实例

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    RGB数据生成BMP位图(其中包括RGB数组随机生成)

    1. **创建RGB数组**:根据指定的图像尺寸,生成一个二维数组,每个元素包含红、绿、蓝三个分量的随机整数。 2. **计算位图大小**:根据RGB数组的尺寸和颜色深度,计算出位图文件的实际大小。由于BMP文件的行必须是4...

    使用快速排序法对一维数组进行排序

    描述中的程序实现了快速排序法,可能是用一种编程语言如C++、Java或Python编写的,用于对一维数组进行排序。这种程序的实现一般包括上述的三个主要步骤,并可能包含优化措施,例如处理小数组时改用插入排序,或者...

    基于JAVA实现的常用数据结构代码,JAVA实现复杂度、动态数组、链表、栈、队列、二叉搜索树等

    然而,插入和删除操作在非尾部位置可能会导致数组内部元素的重新排列,因此它们的时间复杂度通常为O(n)。 3. **链表**:链表是一种线性数据结构,每个元素(节点)包含数据和指向下一个节点的引用。Java中的...

Global site tag (gtag.js) - Google Analytics