将一个有序数组打乱

wo554006164 2009-05-28 08:37:32
比如有个数组的元素是1到1000按顺序排列的,现在要将其打乱。求最好的方法!效率高点。因为以后元素可能会更多。
...全文
759 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiabingnuaa 2009-05-28
  • 打赏
  • 举报
回复
#include "stdio.h"
#include "time.h"
#include "windows.h"

#define N 16


void main()
{
int a[N];
int i,j;
int temp;

for(i=0; i<N; i++)
a[i] = i;

srand((unsigned)time(NULL));

for(i=0; i<N; i++)
{
j = rand()%N;

temp = a[i];
a[i] = a[j];
a[j] = temp;
}


for(i=0; i<N; i++)
printf("%d ", a[i]);

printf("\n");


return;
}
  • 打赏
  • 举报
回复
随机取下标

hoho

提示:随机取的时候记得要 均匀 地取
liyanhong5201314 2009-05-28
  • 打赏
  • 举报
回复
7楼的代码摘自 <算法导论> 第5章 随机算法
liliangbao 2009-05-28
  • 打赏
  • 举报
回复
学习~
lingyin55 2009-05-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 wo554006164 的帖子:]
比如有个数组的元素是1到1000按顺序排列的,现在要将其打乱。求最好的方法!效率高点。因为以后元素可能会更多。
[/Quote]

洗牌就可以了


///其中数组a存放1到1000个顺序的数。

int tmp = 0;
int randtmp = 0;
for( int i = 0; i < 1000; i++ )
{
randtmp = rand() % i;
tmp = a[i];
a[i] = a[randtmp];
a[randtmp] = tmp;
}

zhan1094 2009-05-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 goodname 的回复:]
这个问题说起来比较麻烦。

楼主可以google一下 “洗牌算法“
[/Quote]
up
liyanhong5201314 2009-05-28
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int a[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int i, j, t;

for (i = 1; i < 16; i++)
{
j = rand() % (15-i+1) + i;
t = a[i];
a[i] = a[j];
a[j] = t;
}

for (i = 1; i < 16; i++)
printf("%d ", a[i]);
printf("\n");

return 0;
}
pathuang68 2009-05-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 liao05050075 的回复:]
如果是C++的话,可以使用stl的random_shuffle()

如果是C的话,那么你可以去找一找它实现的代码
[/Quote]
random_shuffle()很适合的
光宇广贞 2009-05-28
  • 打赏
  • 举报
回复
goodname 2009-05-28
  • 打赏
  • 举报
回复
这个问题说起来比较麻烦。

楼主可以google一下 “洗牌算法“
liao05050075 2009-05-28
  • 打赏
  • 举报
回复
http://blog.163.com/tianshi_17th/blog/static/485641892008515111805/
这里有很多可以使用的方法。你参考一下吧
liao05050075 2009-05-28
  • 打赏
  • 举报
回复
如果是C++的话,可以使用stl的random_shuffle()

如果是C的话,那么你可以去找一找它实现的代码
  • 打赏
  • 举报
回复
[Quote=引用楼主 wo554006164 的帖子:]
比如有个数组的元素是1到1000按顺序排列的,现在要将其打乱。求最好的方法!效率高点。因为以后元素可能会更多。
[/Quote]

将其打乱??。。随便打乱?
随便生成点随机数,然后交换不同下标的元素。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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