求一个easy算法,简单调整位置

guogangj 2010-11-24 02:29:49
class CItem
{
BYTE blah[HUGE];
};

CItem data[5];

INT reposition[5] = {4,2,0,3,1};

要求,根据repositon的内容调整dt的内容,如上,把原来下标4的元素调到0,把原来下标2的元素调到1。

写个算法,复杂度为O(n),还要尽量节省空间,因为HUGE可以很大,并且data可能远远不止5个元素。
...全文
149 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
guogangj 2010-11-27
  • 打赏
  • 举报
回复
我总结了一下,代码贴这里:
http://www.cppblog.com/guogangj/archive/2010/11/27/134843.html
guogangj 2010-11-25
  • 打赏
  • 举报
回复
to asmlearn

你是说递归吗?最好能贴一下代码,不过递归可是需要在程序栈区中复制代码的,递归了太多层的话会导致栈溢出,这也不是一种节省空间的做法。
guogangj 2010-11-25
  • 打赏
  • 举报
回复
呵呵,假如就有这么一道题目,需要节省内存,该怎么做?
一个嵌入式的环境,往往真的不能动态分配出一大块的内存来哦。
donkey301 2010-11-25
  • 打赏
  • 举报
回复
保证下一次的Distination是上一次的Source,这样只要一个临时变量就行了
譬如:
CItem Temp;
Source Distination
0 --> Temp
4 --> 0
1 --> 4
2 --> 1
Temp --> 2

3 --> Temp
...
Temp --> ..
pmars 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 pmars 的回复:]
开大数组不行么?
CItem array[MAX] ;
for : array[i] = data[reposition[i]] ; //数据类型好像不协调哈!
for : data[i] = array[i] ;
[/Quote]
呵呵,array为CItem类型的啊!
pmars 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 guogangj 的回复:]
class CItem
{
BYTE blah[HUGE];
};

CItem data[5];

INT reposition[5] = {4,2,0,3,1};

要求,根据repositon的内容调整dt的内容,如上,把原来下标4的元素调到0,把原来下标2的元素调到1。

写个算法,复杂度为O(n),还要尽量节省空间,因为HUGE可以很大,并且data可能远远不止5个……
[/Quote]
开大数组不行么?
int array[MAX] ;
for : array[i] = data[reposition[i]] ; //数据类型好像不协调哈!
for : data[i] = array[i] ;
donkey301 2010-11-24
  • 打赏
  • 举报
回复
为什么不用指针呢?这样只要交换指针地址就行了,没必要交换内容的。
asmlearn 2010-11-24
  • 打赏
  • 举报
回复
1、写一个交换函数,入口参数为要交换的两个下标索引。
2、依次处理数组每个元素,将当前索引和元素值作为参数传给上一个交换函数。
至于节省空间可能要用到动态分配,不过现在内存芯片动不动就上G,开个大数组也没关系吧。

33,027

社区成员

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

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