合并 排序问题 哈哈 求好算法

zhanglinfeng 2006-07-31 08:19:21
有N个结构体数组,每个结构体有一个序号
如:
struct A[N]
{
int seq; //序号
int name;
int age;
}
每个结构体数组已经是按升序排列了, 现在要将N个结构体数组合并成一个结构体数组。
并还是按升序排列。

求各路大虾门的手法,
...全文
780 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
HHHHHHHHHHHHH_H 2006-08-05
  • 打赏
  • 举报
回复
栈不是受限的线表么
可不可以把数组当成栈一样运算
自己建立一个出栈函数
或者前面说把插入过的再删除
我觉得没有必要
只要知道运行到什么地方就够了
所以计算时间复杂度不应该算在内
HHHHHHHHHHHHH_H 2006-08-05
  • 打赏
  • 举报
回复
这个程序主要耗费时间在N路数据的比较
用个快点的排序算法
我建议使用插入排序

一次取N路的第一个节点作为有序区
然后再取路作为无序区,
在基本有序的情况下
这样的排序的速度应该比较快
shuang8 2006-08-04
  • 打赏
  • 举报
回复
有序的?那普通的归并应该就能解决问题了吧?
yshuise 2006-08-02
  • 打赏
  • 举报
回复
是否可以用STL,
比如list<T>t;
就行.
cxjddd 2006-08-02
  • 打赏
  • 举报
回复
如果数据量不大,最普通的归并算法就可以了啊。
LeeMaRS 2006-08-01
  • 打赏
  • 举报
回复
有序的N路归并啊... 这个还是比较简单的吧...

简单想了一下, 每次把N个数组里面最小的取出来比较一下, 是O(N)的复杂度, 然后把最小的加入结果数组中, 同时移去这个最小的元素. 这种朴素的方法是O(NM)的, M是元素的总数.

显然, 从N个数组中每次取最小的 这一步操作可以借助 heap, 把复杂度降到O(logN). 那么总体复杂度就是O(MlogN). 我觉得这个复杂度已经很不错了.
yyfhz 2006-08-01
  • 打赏
  • 举报
回复
上面LeeMaRS的算法复杂度应当是O(M*N*N)和O(M*N*LogN)吧?假设M是每个数组的长度的话。
yyfhz 2006-08-01
  • 打赏
  • 举报
回复
哦,你是用M代表所有元素数组的元素总和是吧,我以为M是代表一个数组中的元素个数。意思是一样的。呵呵
zhanglinfeng 2006-08-01
  • 打赏
  • 举报
回复
自己顶一下
LeeMaRS 2006-08-01
  • 打赏
  • 举报
回复
to yyfhz : 不是你说的这个复杂度. 前面那个算法不care, 只说后面那个. 每一次从heap里取最小元是O(1)的, 删除然后插入新的是O(logN)的, 也就是说只需要花O(logN)的费用就能让一个元素进到结果数组里面. 我是用M表示元素的总个数. 复杂度自然是 O(MlogN).

33,008

社区成员

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

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