sort在stl庫中是排序函式,有時冒泡、選擇等o(n^2)演算法會超時時,我們可以使用stl中的快速排序o(n log n)完成排序
sort在庫裡面,原型如下:
template void sort ( randomaccessiterator first, randomaccessiterator last );
template void sort ( randomaccessiterator first, randomaccessiterator last, compare comp );
他有兩種形式乙個有三個引數,乙個有兩個引數,我們先講講兩個引數的吧!
sort的前兩個引數是起始位址和中止位址
如:sort(a,a+n) 表示對a[0] a[1] a[2] ... a[n-1] 排序
**如下:
#include #include using namespace std;
int main()
這樣是預設公升序的,那如果是降序呢?
這樣,我們就要用到第三個引數,第三個引數是乙個比較函式
bool cmp(int a,int b)
這個就是降序排序的比較函式,意思:
是a > b時為true,就不交換,a < b時為false,交換
然後我們呼叫sort(a+1,a+n+1,cmp);就可以對a[1] a[2] a[3] ... a[n] 進行排序了
sort也能對結構體排序,如:
#include #include using namespace std;
struct node p[1001];
int n;
int cmp(node a,node b)
int main()
以上**的意思是,如果a.x不等於b.x,就按x從小到大排;如果x相等按y從小到大排
結構體還可以過載運算子,使sort只用兩個引數就可以按自己的規則排序,如:
#include #include using namespace std;
struct node
}p[1001];
int n;
//int cmp(node a,node b)
int main()
STL sort函式的內部實現
1 在stl提供的各式各樣的演算法中,sort 是最複雜最龐大的乙個。這個演算法只接受randomaccessiterators 隨機訪問迭代器 然後將區間內所有元素由小到大重新排列。第二個版本允許使用者自己指定乙個仿函式作為排序標準。2 對於關係型容器,底層自己採用有自動排序功能的rb tree,...
STL sort演算法中的比較函式
排序,既陌生又熟悉的名詞。排序,成為面試官中喜歡問的演算法問題。c stl中為我們提供了std sort,所以今天我們不是來描述各種排序演算法的實現,而是看看怎麼使用stl為我們提供的sort。先預熱,include include include int main person int age,s...
STL sort的危險之處
stl好用是好用,不慎的話相當危險,尤其是俺們這些伺服器程式.迭代器失效就不說了,發生了就是個當機回檔的事,慎之 最近工作中看到了stl sort排序導致的乙個core,問題的根源就是,stl sort要求被排序的物件必須是順序確定的,比如你在過載 操作符的時候 class test1 上面的 就是...