STL下 下的sort函數


定義:

sort函數用於C++中,對給定區間所有元素進行排序,默認為升序,也可進行降序排序。sort函數進行排序的時間復雜度為nlog2n,比冒泡之類的排序算法效率要高,sort函數包含在頭文件為#include<algorithm>的c++標准庫中。

語法:

sort(start,end,cmp)

(1)start表示要排序數組的起始地址;
(2)end表示數組結束地址的下一位;
(3)cmp用於規定排序的方法,可不填,默認升序。

時間復雜度:

時間復雜度為nlog2(n),執行效率較高。

功能:

sort函數用於C++中,對給定區間所有元素進行排序,默認為升序,也可進行降序排序。
一般是直接對數組進行排序,例如對數組a[10]排序,sort(a,a+10)。而sort函數的強大之處在可與cmp函數結合使用,即排序方法的選擇。

sort類函數總結:

函數名 功能描述
sort 對給定區間所有元素進行排序
stable_sort 對給定區間所有元素進行穩定排序
partial_sort 對給定區間所有元素部分排序
partial_sort_copy 對給定區間復制並排序
nth_element 找出給定區間的某個位置對應的元素
is_sorted 判斷一個區間是否已經排好序
partition 使得符合某個條件的元素放在前面
stable_partition 相對穩定的使得符合某個條件的元素放在前面

 

常用的cmp函數:

(1)對一組數據排序,使得數據從大到小

我們知道sort函數默認是從小到大排序的,所以我們需要定義一個cmp函數。

模板:

bool cmp(int a , int b)
{
    return a>b;
}

 例子:對n組數據從大到小進行排列

#include<bits/stdc++.h>
using namespace std;
bool cmp(int a,int b)
{
    return a>b;
}
int main()
{
    int n;
    cin>>n;
    int a[n];
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    sort(a,a+n,cmp);
    for(int i=0;i<n;i++)
    {
        cout<<a[i]<<" ";
    }
}

(2)給出幾組數據,使得排序得到一個最小(最大)的數字(拼數)

模板:

bool cmp(string a,string b)
{
    return a+b<b+a;    //從小到大排列
}

bool cmp(string a,string b)
{
    return a+b>b+a;    //從大到小排列
}

 例子:對n做數據進行排列,使得組成的數據最小

#include <bits/stdc++.h>
using namespace std;
bool cmp(string a,string b)
{
    return a+b<b+a;
}
int main()
{
    int n;
    cin>>n;
    string a[20];
    for(int i=0;i<n;i++)
        cin>>a[i];
    sort(a,a+n,cmp);
    for(int i=0;i<n;i++)
        cout<<a[i];
}

 例題:

https://ac.nowcoder.com/acm/problem/16783


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM