c++中如何实现随机排序?

来源:百度知道 编辑:UC知道 时间:2024/06/09 08:05:38
比如现在有n个数字(可能有重复),如1,2,2,3,4,2,1,3,5,5,1如何在程序中实现将这几个数字按随机的顺序输出?
谢谢!
但能不能再完整一些,我是C++初学者,望不吝赐教!
我这样写错误在哪,swap如何定义?
#include "iostream.h"
#include <stdlib.h>
#include <time.h>
void main()
{
int a[10]={1,1,2,3,6,2,4,5,2,3};
int i,j,n=10;
srand(time(0));
for(i = 0;i<n;i++)
{
j = rand()%n;
swap(a[i], a[j]);

cout<<a[i]<<endl;
}

}

我使用这样一种算法:
srand(time(0));
for(i = 0;i<n;i++)
{
j = rand()%n;
swap(a[i], a[j]);
}
说明:遍历数组的同时,将当前元素与数组中随机位置的元素交换,实现将数组随机排序。
PS.上面的伪码有些地方可能你要自己修改一下,比如swap函数。

随机排序无非就是打乱原来的顺序,既然要随机,那就要用到c++的srand(time(NULL))来设置随机种子,在这个基础之上就可以用rand()这样的函数去随机产生一个随机数.

你的数据是多少就产生多少随机数,并过滤已产生的随机数就可以了.
比如你有一个数据BYTE n[4] = {1,3,5,4};
那么你可以rand()%4这样的方式去产生一个随机数,同样的需要产生4次随机数,而且从第二次开始你要判断所产生的随机数是不是已经用过了(上一次随机产生了), 如果已用过,继续产生随机数,一直到全部随机数产生出来.
然后根据你的随机数,其实也是你数据数组的下标, 自己把数据排列一下就OK了.
这种方式应该可以达到完全随机效果,每一次运行具备随机性.