举个例子:有一批数据,共n个,依次为a1,a2,a3,…,an-1,an,需要对它们进行完全随机排序。排序方法类似于直接选择,从左至右,即从ai+1~an中随机抽取一个数据与ai交换(1≤i≤n-1)。先排序第一个数据a1:从a2~an中随机抽出一个数据与a1交换;再排第二个数据a2:从a3~an中随机抽取一个数据与a2交换;再排第三个数据a3:从a4~an中随机抽取一个数据与a3交换;…;最后排第n-1个数据an-1:从an~an中随机抽取一个数据与an-1交换;第n个数据已不需要排序。这样,总共需要排n-1次。 从以上的算法分析中可以看出,每个待排序数据都会与其它数据交换位置,所以,每个数据都不会出现在原先的位置上,这是完全随机排序。
List l=new ArrayList(input)
//将input数组放入arraylist,input为集合
List res=new ArrayList()
//用来存放随机产生元素的结果
Random r=new Random()//随机数
int size=l.size()
for(int i=0i<sizei++){
res.add(l.remove(
r.nextInt(l.size())))
//为了保证不重复,每次随机产生后都删除该元素。
}
//此时res中存放的就是随机排序的结果。
//在java中 如何随机排列几个数字
/**
* 对给定数目的自0开始步长为1的数字序列进行乱序
* @param no 给定数目
* @return 乱序后的数组
*/
public static int[] getSequence(int no) {
int[] sequence = new int[no]
for(int i = 0i <noi++){
sequence[i] = i
}
Random random = new Random()
for(int i = 0i <noi++){
int p = random.nextInt(no)
int tmp = sequence[i]
sequence[i] = sequence[p]
sequence[p] = tmp
}
random = null
return sequence
}
public static void main(String[] args) {
int[] num = getSequence(10)
for (int i = 0i <num.lengthi++) {
System.out.println(num[i])
}
}