php专区

 首页 > php专区 > PHP进阶 > 算法 > 如何将一个数组的元素顺序打乱

如何将一个数组的元素顺序打乱

分享到:
【字体:
导读:
         摘要:给定一个数组,要求把数组内元素的顺序随机打乱,然后输出,主要是要保证效率。这个算法其实简单,首先从所有元素中随机选取一个与第一个元素进行交换,然后在第二个之后选择一个元素与第二个交换,直到最后一个元素。这样能确保每个元素在每个位置的概率都是1/n。 ...

如何将一个数组的元素顺序打乱

给定一个数组,要求把数组内元素的顺序随机打乱,然后输出,主要是要保证效率。

这个算法其实简单,首先从所有元素中随机选取一个与第一个元素进行交换,然后在第二个之后选择一个元素与第二个交换,直到最后一个元素。这样能确保每个元素在每个位置的概率都是1/n。代码如下:

#include 
#include 
#include 
// 随机打乱一个数组
void random(int a[], int n)
{
	int index, tmp, i;
	srand(time(NULL));
	for (i = 0; i 
    
    

把一个数组的顺序打乱,很常用的算法,比如洗牌。

下面用Java实现:

import java.util.Random;  
  
public class RandomSort {  
    private Random random = new Random();  
    //数组大小  
    private static final int SIZE = 10;  
    //要重排序的数组  
    private int[] positions = new int[SIZE];  
      
    public RandomSort() {  
        for(int index=0; index=0; index--) {  
            //从0到index处之间随机取一个值,跟index处的元素交换  
            exchange(random.nextInt(index+1), index);  
        }  
        dwn();  
    }  
      
    //交换位置  
    private void exchange(int p1, int p2) {  
        int temp = positions[p1];  
        positions[p1] = positions[p2];  
        positions[p2] = temp;  
    }  
      
    //打印数组的值  
    private void dwn() {  
        for(int index=0; index
    
    

不过由于随机数产生器产生的随机数不太随机,所以排序的结果页有很多相似的地方。换一个好的随机数产生器,会达到更好的效果,就能用于洗牌了。

本文地址:http://www.nowamagic.net/librarys/veda/detail/491,欢迎访问原出处。

如何将一个数组的元素顺序打乱
分享到:
利用数组的索引也可以排序
利用数组的索引也可以排序 看到一道算法面试题,比较有趣,我自己用C做了一下。 题目:随机生成10个100以内的整数,把数据从小到大排序,而且算法复杂度只能是1。 这个算法比较有意思的地方是,首先建立一个数组B,其元素个数为数组A的最大元素值,然后用A的元素作为B的数组下标,然后给存在的B元...
最大公约数问题的两种方法
最大公约数问题的两种方法 最大公因数,又称最大公约数。是指 [n(≧2)个自然数 a1, a2, ..., an] 的最大公因数。通常有两种表示方式: 它们的所有公因数中最大的那一个; 如果自然数 m 是这 n 个自然数的公因数,且这 n 个数的任意公因数都是 m 的因数,就称 m 是这 n 个数的最大用因...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……