用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。

头文件是#include< algorithm >

sort函数进行快速排序,时间复杂度为n*log2n,比冒泡之类的要省时不少

Sort函数使用模板:

Sort(start,end,排序方法)

1.第一个参数是要排序数组的起始地址

2.第二个参数是数组结束地址的下一位

3.第三个是排序的方法,可不填,默认升序

一.直接对数组进行排序,例如对数组a[10]排序,sort(a,a+10)就行了。

例:


#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int a[10]={9,6,3,8,5,2,7,4,1,0};
    for(int i=0;i<10;i++)
    cout<<a[i]<<endl;
    sort(a,a+10);//指针
    for(int i=0;i<10;i++)
    cout<<a[i]<<endl;
    return 0;
}
二.通过上面的例子,会产生疑问:如何实现从大到小的排序?

这就如前文所说需要在sort()函数里的第三个参数了,告诉程序我要从大到小排序。

需要加入一个比较函数compare(),此函数的实现过程如下:


bool compare(int a,int b)
{
    return a>b;
}
实现从大到小的排序的方法来调用函数!

#include<iostream>
#include<algorithm>
using namespace std;
bool compare(int a,int b)
{   
return a>b;
}
int main()
{
int a[10]={9,6,3,8,5,2,7,4,1,0};
for(int i=0;i<10;i++)
cout<<a[i]<<endl;  
sort(a,a+10,compare);//在这里就不需要对compare函数传入参数了   
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
return 0;
}
三.如何对字符串进行排序呢?

假设创建了字符串数组


bool cmp(string a,string b)
{
    return a<b;
}

然后sort(s,s+n,cmp)就可以对很多个字符串进行排序了

四.如何对结构体进行排序呢?

假设自己定义了一个结构体node

有一个node类型的数组node arr[100],想对它进行排序:先按a值升序排列,如果a值相同,再按b值降序排列,如果b还相同,就按c降序排列。就可以写这样一个比较函数:

以下是代码片段:

struct node
{
int a;
int b;
double c;
}
bool cmp(node x,node y)
{
if(x.a!=y.a) return x.a<y.a;
if(x.b!=y.b) return x.b>y.b;
return x.c>y.c;
}

五.结构体重载操作符

struct node
{
    int x, y;
    bool operator < (const node &r) const
    {
        return x > r.x
    }
}a[maxn];
 
sort(a, a + n);

与cmp函数用法差不多,只需要修改return的内容就行了。

:输入第一行给出2个正整数N和k。随后N行,每一行有k个数,其间以空格分隔。将每一行进行排序并输出。


#include<iostream>
#include <algorithm> 
using namespace std;
int main(){
    int N,K,M,kk,sum=0;
    cin>>N;
    cin>>K;
    cin>>M;
    int sor[N][K],arg[N];
    for(int i=0;i<N;i++){
        for(int j=0;j<K;j++){
            cin>>kk;
            sor[i][j]=kk;
        }
        sort(sor[i],sor[i]+K);//存指针
    }
    
    for(int i=0;i<N;i++){
        for(int j=0;j<K;j++){
            cout<<sor[i][j]<<" ";
        }
        cout<<endl;
    }
}
输入样例:
6 5
88 90 85 99 60
67 60 80 76 70
90 93 96 99 99
78 65 77 70 72
88 88 88 88 88
55 55 55 55 55

输出结果:
60 85 88 90 99 
60 67 70 76 80 
90 93 96 99 99 
65 70 72 77 78 
88 88 88 88 88 
55 55 55 55 55