C++中如何实现数组的随机排序?

做个明白人 2010-05-13 09:18:24
谢谢了……
怎么去实现随机的排序啊
...全文
1200 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hallowwar 2010-05-14
  • 打赏
  • 举报
回复
随机排序也就是概率而已,和那个二叉树排序一样。
weiqiyiji3 2010-05-14
  • 打赏
  • 举报
回复
你是要打乱数组?
这样的话

srand(time(0))

for(int i = 0; i < 数组长度; i++)
{
int r = rand();
交换数组索引 r 和 i 对应的值
}
dskit 2010-05-14
  • 打赏
  • 举报
回复
http://www.cplusplus.com/reference/algorithm/random_shuffle/

// random_shuffle example
#include <iostream>
#include <algorithm>
#include <functional>
#include <vector>
#include <ctime>
#include <cstdlib>
using namespace std;

// random generator function:
ptrdiff_t myrandom (ptrdiff_t i) { return rand()%i;}

// pointer object to it:
ptrdiff_t (*p_myrandom)(ptrdiff_t) = myrandom;

int main () {
srand ( unsigned ( time (NULL) ) );
vector<int> myvector;
vector<int>::iterator it;

// set some values:
for (int i=1; i<10; ++i) myvector.push_back(i); // 1 2 3 4 5 6 7 8 9

// using built-in random generator:
random_shuffle ( myvector.begin(), myvector.end() );

// using myrandom:
random_shuffle ( myvector.begin(), myvector.end(), p_myrandom);

// print out content:
cout << "myvector contains:";
for (it=myvector.begin(); it!=myvector.end(); ++it)
cout << " " << *it;

cout << endl;

return 0;
}
dskit 2010-05-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wesleyluo 的回复:]
引用 1 楼 dskit 的回复:
http://www.cplusplus.com/reference/algorithm/random_shuffle/


C/C++ code
// random_shuffle example
#include <iostream>
#include <algorithm>
#include <functional>
#include <……
[/Quote]

在例子里使用random_shuffle(v.begin(),v.end())产生的随机序列与
random_shuffle(v.begin(),v.end(),randfunc)产生的随机序列确实是一样的。

srand ( unsigned ( time (NULL) ) );
使用当前时间初始化随机产生函数,因此第二个问题的答案是否定的,你可能看到两次运行相同的结果,但是在有一定时间间隔后运行,结果就会变化,原因是time (NULL)变了,产生的随机数也跟着变了。
wesleyluo 2010-05-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 taodm 的回复:]
注意人家的 srand ( unsigned ( time (NULL) ) );
[/Quote]
哦,原来是这样啊。
taodm 2010-05-14
  • 打赏
  • 举报
回复
注意人家的 srand ( unsigned ( time (NULL) ) );
向立天 2010-05-14
  • 打赏
  • 举报
回复 5
秀一段代码
//随机生成节点
int nTemp;
int nData[10], nTran[10];
for(i=0; i<10; i++)
nTran[i]=i;
for(i=0; i<10; i++)
{
nTemp = rand()%(10-i);
nData[i] = nTran[nTemp];
nTran[nTemp] = nTran[9-i];
}
wesleyluo 2010-05-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dskit 的回复:]
http://www.cplusplus.com/reference/algorithm/random_shuffle/


C/C++ code
// random_shuffle example
#include <iostream>
#include <algorithm>
#include <functional>
#include <vector>
#include <……
[/Quote]
请教下使用random_shuffle(v.begin(),v.end())产生的随机序列与
random_shuffle(v.begin(),v.end(),randfunc)产生的随机序列是一样的?
而且编译后每次运行产生的随机序列都是固定的,也就是这样
假设有序列0,1,2,3,4,5,6,7,8,9
随机排序后3,5,8,7,1,9,6,2,4,0 //这里就是固定了,以后每次随机序列都是这样的?

以上是我看到的问题不知道是不是正确的?

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧