当前位置: 代码迷 >> 综合 >> sort函数(C++)(sort是不稳定排序 可以改成稳定排序 stable_sort 用法和sort一样)
  详细解决方案

sort函数(C++)(sort是不稳定排序 可以改成稳定排序 stable_sort 用法和sort一样)

热度:66   发布时间:2023-12-05 21:48:28.0

sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。sort函数包含在头文件为#include<algorithm>的c++标准库中。

Sort(start,end,cmp)

(1)start表示要排序数组的起始地址;

(2)end表示数组结束地址的下一位;

(3)cmp用于规定排序的方法,可不填,默认升序。

首先,咱们先来看一看sort()函数的从小到大排序(默认):

#include<iostream>
#include<algorithm>//其实可以直接万能头文件
using namespace std;//#include<bits/stdc++.h>
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]<<" ";cout<<endl;sort(a,a+10);//关键点for(int i=0;i<10;i++)cout<<a[i]<<" ";return 0;
}也可以这样子:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{int a[100000];//尽量把数组开的足够大int i;int n;//用来控制要进行排序的元素个数cin>>n;for(i=0;i<n;i++)//如果i从1开始到小于等于n{cin>>a[i];}sort(a,a+n);//这里要变为sort(a+1,a+n+1);for(i=0;i<n;i++){cout<<a[i]<<" ";}return 0;
}

    //由此可知,sort函数没有第三个参数,实现的是从小到大(升序)排列;
那么,从大到小排序就需要第三个参数了:(cmp)

#include<iostream>
#include<algorithm>
using namespace std;
bool compare(int a,int b)
{   return a>b;//这里如果是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]<<" ";  sort(a,a+10,compare);//在这里就不需要对compare函数传入参数了   cout<<endl;//用来分隔排序前后的结果for(int i=0;i<10;i++)cout<<a[i]<<" ";return 0;
}

在这里我还要强调一点,就是可以将第三个参数写为greater<int>(),这就是对int数组进行排序,当然在<>里面我们也可以成double,long,float类型等等;

#include<iostream>#include<algorithm>using namespace std;int main()
{int num[10] = {6,5,9,1,2,8,7,3,4,0};sort(num,num+10,greater<int>());
//第三个参数改为greater<int>()就不需要定义一个bool函数for(int i=0;i<10;i++){cout<<num[i]<<" ";}return 0;
} //输出结果:9 8 7 6 5 4 3 2 1 0

还有就是对于我们自己定义的bool类型的函数可以实现我们需要的排序规则,让数组元素从大到小只是其中一种排序规则;使用sort()我们还可以按照一定的准则进行排序。比如说我们按照每个数的个位进行从大到小排序,我们就可以根据自己的需求来写一个函数作为排序的准则传入到sort()中。

bool compare(int x,int y)
{return x % 10 > y % 10;
}

用sort对结构体进行排序步骤如下:
1.定义一个结构体
struct student

{
        int x;
        int y;

}a[100000];
2.写bool函数 
bool cmp(student a,student b) 
{
        if(a.y==b.y) 
                return a.x<b.x;
        else

                return a.y<b.y; //注意是使用a,b;
}
3.最后调用
sort(a,a+n,cmp); 

         以上就是我对于sort()用法的了解。如果你觉得我的文章对你有用请点个赞支持一下吧,喜欢我写的文章那么请点个关注吧,如果我的文章里面知识点很多那么就请收藏一下方便您以后使用。如果此文章有错误或者有不同的见解欢迎评论或者私信我。

  相关解决方案