sort()函数详解

本文详细介绍了C++中的sort函数,包括其基本功能、语法、时间复杂度以及如何通过cmp函数实现自定义排序。示例中展示了从简单的升序排序到根据特定条件(如数字的个位数、学生平均分)进行排序的用法,强调了sort函数在排序效率和灵活性上的优势。

一.sort函数是什么?

sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。sort函数进行排序的时间复杂度为n*log2n,比冒泡之类的排序算法效率要高,sort函数包含在头文件为#include<algorithm>的c++标准库中。


二.sort函数简介

语法

Sort(start,end,cmp)

参数

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

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

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

简单来说,第一个参数(start)就是需排序数组名+排序起始数在数组中的下标;第二个参数(end)即需排序数组名+排序起始数+排序数个数;第三个参数较为复杂,我等下再说……

功能

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

一般是直接对数组进行排序,例如对数组a[10]排序,sort(a,a+10)。而sort函数的强大之处在可与cmp函数结合使用,即排序方法的选择。

相对于普通的排序算法,sort()函数在快速排序(详见C++快速排序)的基础上,又进行了优化,时间复杂度为n*log2(n),执行效率较高。


三.sort()函数的CMP

1.无需修改,直接套用

sort函数没有第三个参数,实现的是从小到大(升序)排列: 

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int a[10];
	for(int i=0;i<10;i++)	scanf("%d",&a[i]);
	sort(a,a+10);
	for(int i=0;i<10;i++)	printf("%d",a[i]);
	return 0;
}

2.较为简单的排序条件修改

#include<iostream>
#include<algorithm>
using namespace std;

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

int main(){
	int num[10] = {65,59,96,13,21,80,72,33,44,99};
	sort(num,num+10,cmp);
	for(int i=0;i<10;i++){
		cout<<num[i]<<" ";
	}//输出结果:59 99 96 65 44 13 33 72 21 80
	
	return 0;
	
} 

3.较为复杂的排序条件自定义

比如每一个学生有四科成绩,我们需要根据学生的四科成绩的平均分高低进行排名,那么这个cmp函数我们就可以定义为:

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

struct Student{
    string name;
    double score[4];
};

bool cmp_score(Student x,Student y){
    double average_x,average_y;
    average_x = (x.score[0]+x.score[1]+x.score[2]+x.score[3])/4;
    average_y = (y.score[0]+y.score[1]+y.score[2]+y.score[3])/4;
    return average_x > average_y;
}

int main(){
    Student stu[3];
    string n;
    int s;
    for(int i=0;i<3;i++){
        cin>>stu[i].name;
        for(int j=0;j<4;j++){
            cin>>stu[i].score[j];
        }
    }
    
    sort(stu,stu+3,cmp_score);
    
    for(int i=0;i<3;i++){
        cout<<stu[i].name<<" ";
        for(int j=0;j<4;j++){
            cout<<stu[i].score[j]<<" ";
        }
        cout<<endl;
    }
    
    return 0;
}

总的来说,当CMP返回值为true(符合条件)时,无需交换;反之,返回值为false(不符合条件)时,需要交换。


四.总结

sort()函数是个很有用的妙招,希望大家善用!

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lyh不会打代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值