sort 排序使用介绍

定义

sort()排序是C++中自带的排序算法函数。排序过程相对于堆排序、希尔排序等其他排序算法较简单。

sort()排序函数的调用首先需要头文件algorithm:是“算法”的意思。
sort()函数有三个参数sort(begin, end, 参数三)。begin为指向待sort()的数组的第一个元素的指针,end为指向数组的最后一个元素的下一个位置的指针,参数三为排序方式,参数三如果不写,默认从小到大进行排序。将参数三写为greater()就是从大到小进行排序。<>中也可以写double、long、float等等,看我们变量类型了。

调用方式

简单数组排序

#include <iostream>
#include<algorithm>

using namespace std;

int main()
{
    
    
    int a[6]={
    
    6,2,3,1,5,10};
    sort(a,a+6);
    for(int i=0;i<6;i++)
        cout<<a[i]<<" ";
    return 0;
}

输出:1 2 3 5 6 10

这里可以看到是sort(a,a+10),但是数组a一共只有9个元素,为什么是a+10而不是a+9呢?
因为sort方法实际上最后一位地址对应的数是不取的,而且vector,set,map这些容器的end()取出来的值实际上并不是最后一个值,而end的前一个才是最后一个值!
需要用prev(xxx.end()),才能取出容器中最后一个元素。

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    
    
	int num[10] = {
    
     9,5,6,0,8,7,4,3,2,1 };
	sort(num, num + 10, greater<int>());
	for (int i = 0; i < 10; i++) {
    
    
		cout << num[i] << " ";
	}
	return 0;
}

输出 9 8 7 6 5 4 3 2 1 0

不只可以按照从大到小或从小到大的顺序排序,也可以在外部自定义一个函数,然后将此函数作为参数传递到sort()函数中的参数三处。因此达到按照自己需要的方式进行排序的目的。

#include<iostream>
#include<algorithm>
using namespace std;
int larger(int x, int y)
{
    
    
	return x % 10 > y % 10;
}
int main()
{
    
    
	int a[10] = {
    
     6,25,31,9,25,16,34,17,28,61 };
	sort(a, a + 10,larger);
	for (int i = 0; i < 10; i++)
	{
    
    
		cout << a[i] << " ";
	}
	return 0;
}

输出:9 28 17 6 16 25 25 34 31 61

sort()函数排序算法应用范围很广,适用于多种语言,同时又适用于数组、结构体等。

对string型 按字典序排序

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{
    
    
    string str("hello world");
    sort(str.begin(),str.end());
    cout<<str;
    return 0;
}

输出:dehllloorw

对结构体排序

对于结构体排序其实也不难,只是需要我们自己重写cmp函数
例如要对结构体中的元素b按照升序排序。

#include<bits/stdc++.h>
using namespace std;

struct node{
    
    
    int a;
    int b;
};
bool cmp(node time1,node time2)
{
    
    
    return time1.b<time2.b;
}
int main()
{
    
    
    int n;
    cin>>n;
    node time[n+10];
    for(int i=0;i<n;i++)
        cin>>time[i].a>>time[i].b;
    sort(time,time+n,cmp);
    for(int i=0;i<n;i++)
    {
    
    
        cout<<time[i].a<<" "<<time[i].b<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/xiaojinger_123/article/details/127784963
今日推荐