sort函数和next_permutation().prev_permutation()函数的用法。

1:sort函数:

sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,

也可进行降序排序。sort函数进行排序的时间复杂度为n*log2n,
比冒泡之类的排序算法效率要高,sort函数包含在头文件为#include<algorithm>的c++标准库中

语法:sort(start,end,compare)

在不写compare参数时,该函数默认为升序排列;

如:

 

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int A[10]={1,2,5,8,9,5,84,2,2,96};
    sort(A,A+10);
    for(int i=0;i<10;i++)
    {
        cout<<A[i]<<" ";
    }
    return 0;
}``

 

运行结果:

 

当然sort函数也可以进行降序排列,不过我们要自己写一个bool的compare函数:

 

#include<iostream>
#include<algorithm>
using namespace std;
bool compare(int x,int y)
{
    return x>y;    
}
int main()
{
    int A[10]={1,2,5,8,9,5,84,2,2,96};
    sort(A,A+10,compare);
    for(int i=0;i<10;i++)
    {
        cout<<A[i]<<" ";
    }
    return 0;
}

 

 这样就可以得到降序排列的数了:

 2:next_permutation()和prev_permutation()函数的用法:(#include<algorithm>)

next_permutation()函数是用来求一个数组的全排列,该函数返回比当前排序较大的排序;

不用我们自己去写函数了:

具体用法如下:

 

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int  A[]={1,2,3,4};
     do
     {
         for(int i=0;i<4;i++) cout<<A[i];
         cout<<endl;
     }while(next_permutation(A,A+4));
     return 0;
}

 

输出结果:

 这儿有一个比较典型的例子,大家可以去运用运用:https://www.luogu.org/problemnew/show/P1012

AC代码:

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
    int n;
    cin>>n;
    string A[21];
    for(int i=1;i<=n;i++)
    {
        cin>>A[i];
    }
    string max="0";
    do
    {
        string sum="";
        for(int i=1;i<=n;i++) 
        {
            sum+=A[i];
        }
        if(sum>max) max=sum; 
    }while(next_permutation(A+1,A+n+1));
    cout<<max;
    return 0;
}

 这个题还有另一种解法:就是我们运用字符串可以加减,还有就是数字字符串可以比较大小来做;

AC代码:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
    int n;
    cin>>n;
    string A[21];
    for(int i=1;i<=n;i++)
    {
        cin>>A[i];
    }
    
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(A[j]+A[j+1]<A[j+1]+A[j])//比较两种加和的方式看那种使结果较大。
            swap(A[j],A[j+1]); 
        }
    }
    for(int i=1;i<=n;i++)
    {
        cout<<A[i];
    }
    return 0;
}

 prev_permutation()函数返回一个数组的全排列,返回比当前排序较小的序列;

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int A[]={4,3,2,1};
    do
    {
        for(int i=0;i<4;i++)
        {
             cout<<A[i]<<" ";
        }
        cout<<"  ";
    }while(prev_permutation(A,A+4));
    return 0;
}

 

posted @ 2019-07-13 17:07  香格里拉太子zo  阅读(455)  评论(0编辑  收藏  举报