sort自定義函數排序

sort函數_C++

  C++的STL庫裏有一個 sort 函數,它就是隨機化快速排序,速度比快速排序還快,因爲它克服了逆序時被卡成O(n2)的情況

  想要使用 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 }

  然後排序函數要寫成這樣

1     sort(a+1,a+n+1,cmp);

  後面加上一個自定義的比較器

 

  如果我們想帶着其它數據進行排序,比如按順序給出一些數,然後從小到大輸出,並且輸出時帶上輸入時的順序

1 struct data
2 {
3     int num,val;
4 }
5     a[100];

  那麼我們開一個記錄類型,num 代表編號,val 代表值,然後進行排序

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 小的排在前面

  如果我們要以 num 大的排在前面,只需在比較時多一個條件

1 bool cmp(data x,data y)
2 {
3     return ((x.val<y.val)||((x.val==y.val)&&(x.num>y.num)));
4 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章