怎样把一堆数据的顺序打乱?

rayyang2000 2001-08-22 09:20:30
这些数据是放在一个固定地址空间里面的,需要把它们打乱。并且下次还可以把它们恢复成原来的样子。
有没有算法或者方案实现?
谢谢
...全文
310 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
newer007 2001-08-23
  • 打赏
  • 举报
回复
srand((unsigned(time)NULL);
unsigned char *sortnum = new unsigned char[n];//输入数组
unsigned char *unsort = new unsigned char[n];//输出数组
maxidx = 0x00;
while(n>0)
{//这写错了
temp = rand()*n/32767;
for(i =maxidx ;i < n-1;i ++)
sortnum[i] = sortnum[i+1];
unsort[maxidx++] = sortnum[temp];
n --;

}

newer007 2001-08-23
  • 打赏
  • 举报
回复
srand((unsigned(time)NULL);
unsigned char *sortnum = new unsigned char[n];//输入数组
unsigned char *unsort = new unsigned char[n];//输出数组
maxidx = 0x00;
while(n>0)
{
temp = rand()*n/32767;
if(mark[temp] == 0x00)
{
for(i =maxidx ;i < n-1;i ++)
sortnum[i] = sortnum[i+1];
unsort[maxidx++] = sortnum[temp];
n --;
}
}
laozi 2001-08-23
  • 打赏
  • 举报
回复
用hash算法,好多精简的加解密方案都是这样完成的,无需额外空间。
比如说是个byte型的一维数组a[1000]。而8bit的无符号整数,最大表示为255。设计一套hash算法让随机数0-255平均分布到1000里去。简单点就取这个无符号整数为函数值,a[0]=10,那么就令a[10]=a[0],当然原先的a[10]要保存在临时变量等于121,那么a[131]=121...加密时还需一临时数组b[1000],以确定数组a中放的是加密前的还是加密后的数据。
密钥和解密要麻烦点儿,我只了解到这儿。
Smile_Tiger 2001-08-22
  • 打赏
  • 举报
回复
建立一个对应该数据区的随机索引表,然后按照该索引表将数据区打乱,恢复时,也按该索引表进行。

例如:数据区为: 23,46,77,-5
用一算法产生随机索引表为: 2,3,0,1
然后按照该索引表将数据区打乱:46,77,23,-5
恢复也能够根据索引表进行恢复。
one_add_one 2001-08-22
  • 打赏
  • 举报
回复
建立一个指针数组,数组中的每个元素指向对应的数据。
打乱的时候就把这个数组打乱,读的时候就可以按这个数组的顺序读出。

下次也不用恢复了:)
rayyang2000 2001-08-22
  • 打赏
  • 举报
回复
那有没有减少空间浪费的方法呢?
frman 2001-08-22
  • 打赏
  • 举报
回复
似乎从对信息的要求来说—— 一方面要保存原有的顺序,另一方面还要记录打乱后的数据,似乎空间的浪费是不可避免的啊,除非原来的数据本身能通过某种运算转换成索引的信息
TAlucard 2001-08-22
  • 打赏
  • 举报
回复
不妨找个一对一的函数试试?
rayyang2000 2001-08-22
  • 打赏
  • 举报
回复
这样好像要浪费一倍的空间。有没有更好的方法?

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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