C STL中sort和C中qsort比較

2021-08-03 09:18:11 字數 2840 閱讀 7340

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...