最近本蒟蒻做了乙個實驗,測試sort的效率。
我使用windows10(沒開-o2)系統試驗了三種排序方法:過載運算子,傳入函式指標以及傳入仿函式。
以下n表示給多少個資料排序,對於每個n都測了三次:(單位:ms)
n過載運算子
函式仿函式
500000
80140
80500000
80124
80500000
80139
801000000
172271
1641000000
182279
1741000000
180372
1705000000
9501505
9645000000
9691514
9665000000
9661570
97010000000
1994
3126
2007
10000000
2005
3140
2051
10000000
2007
3155
2015
綠書上的資料(n=10000000):
functor:6324
function:36372
當然我不知道作者用的什麼系統,反正比我慢就對了。
可以看到,傳入乙個函式進行排序是最慢的,而過載運算子和functor速度基本一樣,不過對於n小的資料基本上都是functor快幾毫秒,完全可以忽略不計,如果只按照一種規則排序推薦使用過載運算子,多種規則那也只能functor了。
最後給出測試**:
#include
#include
#include
using
namespace std;
struct nodgd
} a[
10000001
], b[
10000001
], c[
100000001
], d[
10000001];
inline
bool
operator
<
(const nodgd a,
const nodgd b)
struct cmp };
inline
bool
cmp(
const nodgd a,
const nodgd b)
intmain()
sort函式的用法
sort函式的用法 做acm題的時候,排序是一種經常要用到的操作。如果每次都自己寫個冒泡之類的o n 2 排序,不但程式容易超時,而且浪費寶貴的比賽時間,還很有可能寫錯。stl裡面有個sort函式,可以直接對陣列排序,複雜度為n log2 n 使用這個函式,需要包含標頭檔案。這個函式可以傳兩個引數或...
sort函式的用法
sort函式包含在標頭檔案 include 中 1 預設的sort函式是按公升序排。sort a,a n 兩個引數分別為待排序陣列的首位址和尾位址,或者可以首尾指標。又如 vector iterator iter1 v.begin vector iterator iter2 v.begin sort...
Sort函式的用法
stl 裡面有個 sort 函式,可以直接對陣列排序,複雜度為 n log2 n 使用這個函式,需要包含標頭檔案。這個函式可以傳 兩個引數或三個引數 第乙個引數是要排序的 區間首位址 第二個引數是 區間尾位址的下一位址 也就是說,排序的區間是 a,b 簡單來說,有乙個陣列int a 100 要對從a...