IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 算法基础(一)——C++排序sort()的用法 -> 正文阅读

[C++知识库]算法基础(一)——C++排序sort()的用法


前提:有一定的C++基础!

§ sort函数的使用

  • 必须引入头文件algorithm
  • 内部底层实现:由多种排序算法构成,根据数量级决定。大部分是快速排序,这是一个不稳定的排序
  • 稳定排序:stable_sort()

基本用法和演示

1.对整个数组或数组中的一段进行排序

int num[105];
sort(num, num + 100);
//sort(起始位, 结束位的后一个位置)
sort(num + 4, num + 8);
//默认从小到大排序

其中有num[0]~num[99]一百个数,105是一般书写习惯,防止数组越界。
在这里插入图片描述
在这里插入图片描述

2.从大到小排序

sort(起始位, 结束位的后一个位置, 排序方法)

在这里插入图片描述
比较函数返回的是bool类型,函数参数中const建议写上,a在前b在后,a>b表示的是期望排在前面的元素的值大于排在后面的元素的值

3.自定义(如结构体)类型的排序

:C++中没有结构体一说,只有类。
在这里插入图片描述
如果加条件:x项相等时

bool cmp(const node &a, const node &b) {
	if (a.x == b.x) {
		return a.y > b.y;
	}
	return a.x < b.x;
}

:排序函数不能出现=,可能会出现死循环

排序函数也可以写在自定义类型里面,这样就不用传递第三个参数了(指定了一个默认的排序方法)

struct node {
    int x, y;
    //函数后的const意思是不期待更改内部属性
    bool operator<(const node &b) const {
        if (this->x == b.x) {
            return this->y > b.y;
        }
        return this->x < b.x;
    }
};

§ 刷题

1.奖学金

在这里插入图片描述
在这里插入图片描述
样例输入

8
80 89 89
88 98 78
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98

样例输出

8 265
2 264
6 264
1 258
5 258

提交网址1

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

struct node {
    int ch, ma, en, sum, id;
};

bool cmp(const node &a, const node &b) {
    if (a.sum == b.sum) {
        if (a.ch == b.ch) {
            return a.id < b.id;
        }
        return a.ch > b.ch;
    }
    return a.sum > b.sum;
}

int main() {
	//在本地编译器上的当前文件夹创建了input普通文件
	//从这个文件里读入输入数据
    //freopen("input", "r", stdin);
    node stu[305];
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> stu[i].ch >> stu[i].ma >> stu[i].en;
        stu[i].id = i + 1;
        stu[i].sum = stu[i].ch + stu[i].ma + stu[i].en;
    }
    sort(stu, stu + n, cmp);
    for (int i = 0; i < 5; i++) {
        cout << stu[i].id << " " << stu[i].sum << endl;
    }
    return 0;
}

总分相同,则比较语文,语文相同,则比较学号,由此编写比较函数,很基础很简单~~

2.谁拿了最多奖学金

在这里插入图片描述
在这里插入图片描述
样例输入

4
YaoLin 87 82 Y N 0
ChenRuiyi 88 78 N Y 1
LiXin 92 88 N N 0
ZhangQin 83 87 Y N 1

样例输出

ChenRuiyi
9000
28700

提交网址2

//有时间再写

3.大统领投票

在这里插入图片描述
在这里插入图片描述
样例输入

3
123456799
123456789132456789123456789
11111111111111

样例输出

2
123456789132456789123456789

提交网址3

//有时间再写
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-06-29 18:48:02  更:2022-06-29 18:50:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:36:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码