1. 程式人生 > 其它 >sort函式的簡單使用

sort函式的簡單使用

技術標籤:c++

sort函式是C++中的排序函式
時間複雜度類似於快排,為nlog(2)n,效率較高

#include<algorithm>		//所屬標頭檔案
sort(begin,end,cmp);

前兩個是引數是待排序的陣列首地址和尾地址
最後一個引數是compare,表示比較型別
cmp引數可省略,若省略,則預設從小到大排序

如要實現從大到小排序:
1.可呼叫函式greater()函式比較大小
程式碼如下:

#include<iostream>
#include<algorithm>
using namespace std;
int main
() { int a[50],n,i; cin>>n; for(i=0;i<n;i++) cin>>a[i]; sort(a,a+n,greater<int>()); //如果排序其他型別可更改<>內的引數 for(i=0;i<n;i++) cout<<a[i]<<" "; cout<<endl; return 0; }

2.自定義一個比較大小的函式,將大的排前面
自定義函式:

bool compare
(int a,int b) { return a>b; //若改為a<b則可以實現從小到大排序 }

完整程式碼:

#include<iostream>
#include<algorithm>
using namespace std;
bool compare(int a,int b)
{
    return a>b;
}
int main()
{
    int a[50],n,i;
    cin>>n;
    for(i=0;i<n;i++)
        cin>>a[i];
    sort(a,a+n,
compare); for(i=0;i<n;i++) cout<<a[i]<<" "; cout<<endl; return 0; }

sort函式實現對結構體的排序:

#include<iostream>
#include<algorithm>
using namespace std;
struct team
{
    string name;
    int score;
};
bool compare(team a,team b)
{
    if(a.score==b.score)
        return a.name<b.name;
    else
        return a.score>b.score;
}
int main()
{
    int a[50],n,i;
    team t[50];
    cin>>n;
    for(i=0; i<n; i++)
        cin>>t[i].name>>t[i].score;
    sort(t,t+n,compare);
    for(i=0; i<n; i++)
        cout<<t[i].name<<" "<<t[i].score<<endl;
    return 0;
}

有n個隊伍參加比賽,按照分數高低輸出,若兩隊分數相同,則姓名字典序較小的優先輸出
特別強調一點:C++裡兩個字串位元組進行比較時,是把字串的每個字元從首端開始進行按照ASCII值的大小進行比較,如果相同,依次往下比較