c++ stl中sort用法(#include)
一、sort(begin, end, method);
sort() 目前採用的是加強版的快速排序, 是結合內插排序的快速排序
目的在於克服快速排序在最初情況(元素基本有序)的效率底下。
1. sort中method 預設用法:從小到大排序
int a = ;//陣列
sort(a, a + 8);//這裡sort(a,a+n)屬於c++迭代器超尾問題,指向末尾元素的下一位,表示從begin開始後有n個資料
for (int i = 0; i != 8; ++i)
cout << a[i] << " ";
vectorv;//vector容器
v.push_back(2);
v.push_back(3);
v.push_back(10);
v.push_back(7);
sort(v.begin(), v.end());
for (auto it = v.begin(); it != v.end(); ++it)
cout << *it << " ";
2.寫入比較方法用法
除了自己編寫compare函式(
有bool返回值
)其實對於這麼簡單的任務(型別支援「<」、「>」等比較運算子),完全沒必要自己寫乙個類出來。標準庫里已經有現成的了,include包含進來就行。functional提供了一堆基於模板的比較函式物件。它們是(看名字就知道意思了):equal_to、not_equal_to、greater、greater_equal、less、less_equal。對於這個問題來說,greater和less就足夠了,直接拿過來用:如greater(),
bool compare(int a, int b)
int _tmain(int argc, _tchar* argv)
, i;
for (i = 0; i<20; i++)
cout << a[i] << endl;
sort(a, a + 20, compare); //sort(a,a+20,greater());
for (i = 0; i<20; i++)
cout << a[i] << endl;
return 0;
}
二、stable_sort() (include )
stable_sort() 採用的是歸併排序 ,
stable_sort() 和 sort() 的引數說明、用法完全相同,只不過
stable_sort() 為穩定排序,即相等元素的相對順序在排序後不
變。
bool compare_as_ints(double i, double j)
int main()
; qsort(a,8,sizeof(int),comp);
for(int i=0;i<8;++i)
printf("%d ",a[i]);
return 0;
}
//對結構體關鍵字進行的排序
//排序方法:同前
#include #include struct testcase
s[10];
int comp(const void *a,const void *b)
int main()
qsort() 採用的是快速排序 ,
首先要說的是c 語言中的qsort(),不建議使用qsort(),因為
stl(標準模板庫)中的sort() 和 qsort() 的核心都是快速排
序,通常用sort() 就行了。
要選擇合適的排序函式?可能你並不關心效率(這裡的效率指的是程式執行時間), 或者說你的資料量很小,
因此你覺得隨便用哪個函式都無關緊要。 其實不然,即使你不關心效率,如果你選擇合適的排序函式,
你會讓你的**更容易讓人明白,你會讓你的**更有擴充性,逐漸養成乙個良好的習慣,很重要吧 。
如果你以前有用過c語言中的qsort, 想知道qsort和他們的比較,
那我告訴你,qsort和sort是一樣的,因為他們採用的都是快速排序。
從效率上看,以下幾種sort演算法的是乙個排序,效率由高到低(耗時由小變大):
partion
stable_partition
nth_element
partial_sort
sort
stable_sort
記得,以前翻譯過effective stl的文章,其中對如何選擇排序函式總結的很好:
若需對vector, string, deque, 或 array容器進行全排序,你可選擇sort或stable_sort;
若只需對vector, string, deque, 或 array容器中取得top n的元素,部分排序partial_sort是首選.
若對於vector, string, deque, 或array容器,你需要找到第n個位置的元素或者你需要得到top n且不關係top n中的內部順序,nth_element是最理想的;
若你需要從標準序列容器或者array中把滿足某個條件或者不滿足某個條件的元素分開,你最好使用partition或stable_partition;
若使用的list容器,你可以直接使用partition和stable_partition演算法,你可以使用list::sort代替sort和stable_sort排序。
若你需要得到partial_sort或nth_element的排序效果,你必須間接使用。正如上面介紹的有幾種方式可以選擇。
C STL中sort用法介紹
前情提要 0 要使用sort,首先需要包含標頭檔案 algorithm 1 sort函式可以指定兩個引數,也可以指定三個引數。1 第乙個是要排序的陣列的起始位址。2 第二個是結束的位址 最後一位要排序元素的後一位的位址 3 第三個引數是排序的方法,可以是從大到小也可是從小到大,還可以不寫第三個引數,...
C STL庫中sort函式用法
首先sort函式因為它使用的排序方法是類似於快排的方法,時間複雜度為n log2 n 執行效率較高。所以一般資料量很大的資料排序都可以用它來進行。1 sort 函式的標頭檔案為 include 2 sort函式有三個引數 第乙個是要排序的陣列的起始位址。第二個是結束位址 最後一位要排序的位址 第三個...
C stl 的sort使用中的坑
stl的sort函式是乙個很有用且高效的排序方法。如果自行新增比較函式,可以很大程度上的擴充套件其功能,使之能靈活的適應各種場景。但是sort在使用過程中存在一些注意事項,如果不加注意,很容易發生bug滿地跑,你卻不知道bug的源頭在 的情況。1.sort需要迭代器是隨機訪問迭代器。如果使用list...