STL下のsort関数

4039 ワード

定義:
sort関数はC++に用いられ,所与の区間のすべての要素をソートし,デフォルトでは昇順であり,降順ソートも可能である.sort関数の並べ替えの時間的複雑度はnlog 2 nであり,バブルなどの並べ替えアルゴリズムよりも効率が高く,sort関数はヘッダファイルが#includeのc++標準ライブラリに含まれる.
構文:
sort(start,end,cmp)
(1)startは配列を並べ替える先頭アドレスを表す.
(2)endは配列終了アドレスの次のビットを表す.
(3)cmpはソートを規定する方法に用いられ,記入せずにデフォルトの昇順である.
時間の複雑さ:
時間複雑度はnlog 2(n)であり,実行効率が高い.
機能:
sort関数はC++に用いられ,所与の区間のすべての要素をソートし,デフォルトでは昇順であり,降順ソートも可能である.
一般に、配列を直接ソートし、例えば配列a[10]をソートし、sort(a,a+10)を行う.sort関数の強大な点はcmp関数と組み合わせて使用することができ、すなわちソート方法の選択である.
sortクラス関数のまとめ:
関数名
機能の説明
sort
指定した区間のすべての要素をソート
stable_sort
指定された区間のすべての要素を安定してソート
partial_sort
指定した区間のすべての要素の部分をソート
partial_sort_copy
指定した区間をコピーしてソート
nth_element
指定された区間の位置に対応する要素を特定します.
is_sorted
1つの区間が順序付けされているかどうかを判断する
partition
ある条件に合致する要素を前に置く
stable_partition
ある条件に合致する元素を前に置くように相対的に安定している.
 
一般的なcmp関数:
(1)大から小へデータを並べ替える
sort関数のデフォルトは小さいものから大きいものまで並べ替えられていることを知っているので,cmp関数を定義する必要がある.
テンプレート:
bool cmp(int a , int b)
{
    return a>b;
}

例:nグループのデータを大きいから小さいまで並べ替える
#include
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)
    {
        cin>>a[i];
    }
    sort(a,a+n,cmp);
    for(int i=0;i)
    {
        cout<" ";
}
}

(2)最小(最大)の数字(スペル)がソートされるように、いくつかのデータのセットを与える
テンプレート:
bool cmp(string a,string b)
{
    return a+bb+a;    //      
}

例:nをデータとして並べ替え,構成データを最小にする
#include 
using namespace std;
bool cmp(string a,string b)
{
    return a+ba;
}
int main()
{
    int n;
    cin>>n;
    string a[20];
    for(int i=0;i)
        cin>>a[i];
    sort(a,a+n,cmp);
    for(int i=0;i)
        cout<<a[i];
}

例題:
https://ac.nowcoder.com/acm/problem/16783
転載先:https://www.cnblogs.com/icesunbo/p/11484046.html