1.sort
使用:#include
using namespace std;
作用:排序
時間複雜度:n*lg(n)
實現原理:sort並不是簡單的快速排序,它對普通的快速排序進行了優化,此外,它還結合了插入排序和推排序。系統會根據你的資料形式和資料量自動選擇合適的排序方法,這並不是說它每次排序只選擇一種方法,它是在一次完整排序中不同的情況選用不同方法,比如給乙個資料量較大的陣列排序,開始採用快速排序,分段遞迴,分段之後每一段的資料量達到乙個較小值後它就不繼續往下遞迴,而是選擇插入排序,如果遞迴的太深,他會選擇推排序。
函式宣告:
2.sort簡介。
#include
template< class randomit >
void sort( randomit first, randomit last );
template< class randomit, class compare >
void sort( randomit first, randomit last, compare comp );
形式:sort(first_pointer,first_pointer+n,cmp)
引數解釋: 第乙個引數是陣列的首位址,一般寫上陣列名就可以,因為陣列名是乙個指標常量。第二個引數相對較好理解,即首位址加上陣列的長度n(代表尾位址的下一位址)。最後乙個引數是比較函式的名稱(自定義函式cmp),這個比較函式可以不寫,即第三個引數可以預設,這樣sort會預設按陣列公升序排序。
簡單例子:對陣列a的0~n-1元素進行公升序排序,只要寫sort(a,a+n)即可;對於向量v也一樣,sort(v.begin(),v.end())即可。
3.sort擴充套件
sort不只是能像上面那樣簡單的使用,我們可以對sort進行擴充套件,關鍵就在於第三個引數方法一:定義比較函式(最常用)
//情況一:陣列排列
int a[100];
bool cmp1(int a,int b)//int為陣列資料型別
sort(stu,stu+100,cmp2);
注:比較方法也可以放在結構體中或類中定義。
方法二:使用標準庫函式
另外,其實我們還可以再懶一點,在標準庫中已經有現成的。它在哪呢?答案是functional,我們include進來試試看。functional提供了一堆基於模板的比較函式物件,它們是:equal_to、not_equal_to、greater、greater_equal、less、less_equal。這些東西的用法看名字就知道了。在這裡,我麼sort要用到的也只是greater和less就足夠了,用法如下:
公升序:sort(begin,end,less())
降序:sort(begin,end,greater())
缺點:也只是實現簡單的排序,結構體不適用。
方法三:過載結構體或類的比較運算子
//情況一:在結構體內部過載
typedef struct student;
vector v;
sort(v.begin(),v.end());
//情況二:在外部過載
vector v;
bool operator<(const student& s1, const student& s2)
sort(v.begin(),v.end());
注意:一定要過載《運算子,因為系統預設是降序,用的是《運算子。
sort 及對結構體陣列用sort 的用法
排序sort bool cmp int x,int y 用來從大到小 不加則從小到大 或直接這樣寫 bool cmp int x,int y 用來從大到小 不加則從小到大 intmain sort a 0 a 11 cmp 陣列名 陣列需要排序的第乙個座標,陣列名 陣列需要排序的最後乙個座標 1 f...
sort函式用法
sort函式的用法 做acm題的時候,排序是一種經常要用到的操作。如果每次都自己寫個冒泡之類的o n 2 排序,不但程式容易超時,而且浪費寶貴的比賽時間,還很有可能寫錯。stl裡面有個sort函式,可以直接對陣列排序,複雜度為n log2 n 使用這個函式,需要包含標頭檔案。這個函式可以傳兩個引數或...
sort函式用法
標頭檔案 include using namespace std 1.預設的sort函式是按公升序排序。sort a,a n 兩個引數分別為待排序陣列的首位址和尾位址 2.可以自己寫乙個cmp函式,按特定意圖進行排序。例如 1 對陣列a降序排序 int cmp const int a,const i...