std::sort使用的演算法在大多數情況下都比quick sort演算法要快,並且,在quick sort越慢的情況下越明顯。quick sort 平均情況下為o( nlogn ) ,在最壞情況下為 o (n^2)。 而std::sort是針對quick sort最壞情況做的改進,從而保持了 o(nlogn) 的複雜度。但是,對適合quick sort的情況下,std::sort的改進沒有起作用,反而多做了一些操作,就比quick sort慢了。
所以測試資料對於這兩種演算法的比較有很大影響。
std::sort使用的演算法有些忘記了,好象是這樣的:先遞迴使用quick sort的某個版本(主要是參照值的選擇方案,用了三點擊中);當長度較小時(如<20),改用另一種演算法(名字忘了,它在長度較短且比較接近排序完成時比quick sort更快,這個條件正好符合此時的情形);而當效能向 o(n^2) 趨近時,改用heap sort。
sort 使用判別式,而qsort使用的是返回值為int,形參為const void *的函式。
很多人欣賞sort()是因為它是型別安全的,使用它不需要進行造型(cast),沒有人必須去為基本型別寫乙個compare()函式
qsort和sort的區別
first qsort 基本快速排序的方法,每次把陣列分成兩分和中間的乙個劃分值,而對於有多個重複值的陣列來說,基本排序的效率較低。整合在 c語言庫函式裡面的的 qsort 函式,使用 三路劃分的方法解決這個問題。所謂三路劃分,是指把陣列劃分成小於劃分值,等於劃分值和大於劃分值的三個部分。函式對bu...
qsort和sort的區別
基本快速排序的方法,每次把陣列分成兩分和中間的乙個劃分值,而對於有多個重複值的陣列來說,基本排序的效率較低。整合在c語言庫函式裡面的的qsort函式,使用 三 路劃分的方法解決這個問題。所謂三路劃分,是指把陣列劃分成小於劃分值,等於劃分值和大於劃分值的三個部分。函式對buf 指向的資料按公升序排序。...
qsort和sort的區別
first qsort 基本快速排序的方法,每次把陣列分成兩分和中間的乙個劃分值,而對於有多個重複值的陣列來說,基本排序的效率較低。整合在c語言庫函式裡面的的qsort函式,使用 三 路劃分的方法解決這個問題。所謂三路劃分,是指把陣列劃分成小於劃分值,等於劃分值和大於劃分值的三個部分。函式對buf ...