一道算法题

zhu_nn 2010-07-10 08:03:09
一个长度为1亿的整数数组,是整体有序(升序),局部无序的(个别元素比前面的小),而且这种局部无序分布的比较离散,现在请设计出一种比较高效的算法出来,将数组排好序,数组里面有一部分重复的数。
呵呵,大家集思广益啊,尽量多想点好方法。
...全文
236 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanster28_ 2010-07-12
  • 打赏
  • 举报
回复
直接贪心抓升序串可能遇到如下情况

比如每5个有一个无序
5 1 2 3 4 10 5 6 7 8

这样贪心出来n/5 剩下0.8n
wxc1987821 2010-07-12
  • 打赏
  • 举报
回复
mark
angel6709 2010-07-12
  • 打赏
  • 举报
回复
100,000,000=100M
第一遍过滤,过滤时做一些手脚,如分分段,。。每一段的最大,最小值
第二遍对每一个元素插入排序,插入到相应的段中。。
估计总复杂度小2n
showjim 2010-07-12
  • 打赏
  • 举报
回复
感觉直接插入排序效率最高
oyzdz1988 2010-07-12
  • 打赏
  • 举报
回复
对,楼上的想法没错,

归并排序~
宅男小何 2010-07-12
  • 打赏
  • 举报
回复
这样的数据建议用归并排序,效率高!
http://blog.csdn.net/lazy_p/archive/2010/05/04/5557469.aspx
AAA20090987 2010-07-10
  • 打赏
  • 举报
回复
如果无序的元素比较少,就用直接插入排序
如果无序的元素比较多,就用2楼的方法。
qqcrazyer 2010-07-10
  • 打赏
  • 举报
回复
这相我不知道
zhu_nn 2010-07-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fancymouse 的回复:]

贪心抓一个升序串,大体有序的话而且无序是比之前的小的话,那抓出来的这个升序串应该覆盖了大部分的原串。
然后把不在这个串里的拿出来,做传统排序,再和上面那个的归并。O(n+klogk),k是不在升序串里的元素个数。
当然内存还是O(n)的。
[/Quote]
这个和直接做插入排序一样吧?
FancyMouse 2010-07-10
  • 打赏
  • 举报
回复
贪心抓一个升序串,大体有序的话而且无序是比之前的小的话,那抓出来的这个升序串应该覆盖了大部分的原串。
然后把不在这个串里的拿出来,做传统排序,再和上面那个的归并。O(n+klogk),k是不在升序串里的元素个数。
当然内存还是O(n)的。
jdtxse 2010-07-10
  • 打赏
  • 举报
回复
数据好大。如果算法稍稍不好,就算不出来了。

33,008

社区成员

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

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