[問題] 適合大資料的排序方法

作者: 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