作者reader (读者)
看板CSSE
标题Re: [问题] 关於 qsort
时间Mon Dec 27 10:32:22 2004
※ 引述《ccpz (....)》之铭言:
: 先恭喜一下开版 :)
: 一般来说呼叫函数时不会慢一些
: 所以在C/C++ 中才会有蛮多人在用 #define/inline 宣告函数
: 不过 qsort 函数会不断呼叫使用者传入的 compare function
: 这样不会让效率比较差吗?
: 还是说函数内部都是以位元在处理,所以可以弥补一些
: 呼叫函数时的 delay?
不是这样的,而是较好的演算法本身所能产生的效益,已经不小了,
所以适当好用的 framework, 反而比较重要。
以 qsort() 而言,一般比较会多做注意的地方,则是每一个纪录的
大小,如果太大了,有时就会另外建立 indirect reference, 全用
指标或注标值代替,以节省记忆体搬移的时间。
若是对效能的需求很高,其实也很少有人去重写一个专用的 qsort,
而是尽量减少即时的排序需求,尽量预先排序完成,例如使用其他
资料结构,使资料一直保持已排序的状态。
纯以技术面而言,则可另外写一个采用 __fastcall 的比较函数的
qsort(), 也会有一些帮助。
效能的追求是相当精细复杂的事情,可以做的事情其实非常多,而
即使是演算法本身,也还可以再加强。
qsort() 采用的就是号称最快的 quicksort, 然而这个最快,仅是
单一演算法的最快,还有合并多种演算法,特别是在小区间范围做
加强的 fast quicksort, 实作上可以比单纯的 quicksort 还快。
而即使是 quicksort 本身,也还有非递回法的做法,用些许空间
换取更高的效能。此外中间值的取法,也有取阵列的左中右三值,
将它们排序再取中间值,而不单取某一个值的做法。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.222.173.26