C++的STL庫裏有一個 sort 函數,它就是隨機化快速排序,速度比快速排序還快,由於它克服了逆序時被卡成O(n2)的狀況html
想要使用 sort 首先要在頭文件裏申明 #include<algorithm> 算法文件算法
好比咱們有一個數組 a,對它的 1-n 進行升序排序,也就是從小到大數組
1 sort(a+1,a+n+1);
若是要對它進行降序排序,也就是從大到小,則須要手寫一個比較器 cmp,它是一個 bool 類型的函數函數
1 bool cmp(int x,int y) 2 { 3 return x>y; 4 }
而後排序函數要寫成這樣spa
1 sort(a+1,a+n+1,cmp);
後面加上一個自定義的比較器code
若是咱們想帶着其它數據進行排序,好比按順序給出一些數,而後從小到大輸出,而且輸出時帶上輸入時的順序htm
1 struct data 2 { 3 int num,val; 4 } 5 a[100];
那麼咱們開一個記錄類型,num 表明編號,val 表明值,而後進行排序blog
1 sort(a+1,a+n+1,cmp);
重點是比較器,傳入的類型是咱們定義的 data 類型,而後比較裏面的 val 值,最終由於記錄類型的特色排序交會時會總體交換排序
1 bool cmp(data x,data y) 2 { 3 return x.val<y.val; 4 }
這樣排序出來後在 val 值相等時是按照 num 小的排在前面get
若是咱們要以 num 大的排在前面,只需在比較時多一個條件
1 bool cmp(data x,data y) 2 { 3 return ((x.val<y.val)||((x.val==y.val)&&(x.num>y.num))); 4 }
版權全部,轉載請聯繫做者,違者必究