[问题] 适合大资料的排序方法

楼主: kevin77884 ((* ̄▽ ̄)/)   2015-01-09 02:56:38
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
Dev-c++
问题(Question):
要用什么算法比较适合大量数据的排序呢?
喂入的资料(Input):
从档案读取大约几十万笔数字(都是不超过1000的正整数)
补充说明(Supplement):
用了merge-sort/quicksort/heapsort三种算法
好像都会爆掉...
可能会是什么问题呢?
想问哪一种排序算法最可以承受大量的数据输入呢?
(先不考虑执行效能的话...)
作者: carylorrk (carylorrk)   2015-01-09 03:03:00
不超过 1000 的正整数,radix sort 最适合但是要解决问题你要先说你的爆掉是什么意思如果是内存塞不下又没范围,就用 external merge
楼主: kevin77884 ((* ̄▽ ̄)/)   2015-01-09 03:18:00
compile时出现"xxx已经停止运作" 感觉是内存不够...那external merge sort的code要怎么写呢?
作者: bigpigbigpig (To littlepig with love)   2015-01-09 05:46:00
不超过 1000 ... 把它想成大量数据,方向就错误了。查一下 Programming Pearls 的第一章(Jon Benteley)
作者: springman (司布林)   2015-01-09 06:38:00
我感觉未必是内存不够,您有先用几百笔的资料测过您的程式吗?如果资料少时正确,资料大时错误的话才可能是内存的缘故。那也测一下多大才会死掉。
作者: carylorrk (carylorrk)   2015-01-09 07:02:00
算一百万笔,用 int64 存也不会爆。除非存在 stack。compile 的时候就出现难不成是 compiler 有 bug XD (误重点是你根本不知道错在哪,然后开始修一个不存在的bug前面说错,用 counting sort 才对。不用读入所有资料,就能做,而且快。只需要 int[1001] 的空间。然后 external merge sort code google 随便都有...总之,我觉得要不是你别的地方错,不然就是存在 stack先检查完,再来做 counting sort 或 external sort
作者: MOONRAKER (㊣牛鹤鳗毛人)   2015-01-09 10:28:00
神奇海螺说:有BUG
作者: TobyH4cker (Toby (我要当好人))   2015-01-09 12:36:00
真的是compiler在compile时compiler停止运作吗?还是你只是按到“编译并执行”?compiler问题跟程式问题是不一样的
作者: CaptainH (Cannon)   2015-01-09 14:52:00
未看先猜int arr[n]
作者: andy410061 (高坂桐乃は俺の嫁)   2015-01-11 11:19:00
算法的话理论上都可以吧 只是效率的问题会爆掉的话 还是要看是什么东西爆掉才能做判断
作者: Killercat (杀人猫™)   2015-01-11 13:16:00
几十万笔称不上大资料吧... qsort都还ok
作者: longlongint (华哥尔)   2015-01-14 13:01:00
stack overflow?试试看全域变量?

Links booklink

Contact Us: admin [ a t ] ucptt.com