Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >蒜头君的随机数 【C++ 的排序与去重(sort函数与unique函数)】

蒜头君的随机数 【C++ 的排序与去重(sort函数与unique函数)】

作者头像
且陶陶
发布于 2023-04-12 06:43:15
发布于 2023-04-12 06:43:15
91501
代码可运行
举报
文章被收录于专栏:Triciaの小世界Triciaの小世界
运行总次数:1
代码可运行

问题描述

蒜头君想在学校中请一些同学一起做一项问卷调查,为了确保实验的客观性,他先用计算机生成了n(1<=n<=100)个1到1000之间的随机整数,对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。 请你协助蒜头君完成“去重”与“排序”的工作。

输入格式

共两行,第一行为一个正整数n。 第二行有n个用空格隔开的正整数,为所产生的随机数。

输出格式

第一行输出一个正整数m,表示不相同的随机数的个数。第二行输出m个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

样例输入
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
10
20 40 32 67 40 20 89 300 400 15
样例输出
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
8
15 20 32 40 67 89 300 400

首先,介绍一下两个函数~

1. Sort函数

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

语法: Sort(start,end,cmp) 参数: (1)start表示要排序数组的起始地址; (2)end表示数组结束地址的下一位; (3)cmp用于规定排序的方法,可不填,默认升序。 sort类函数总结: sort 对给定区间所有元素进行排序 stable_sort 对给定区间所有元素进行稳定排序 partial_sort 对给定区间所有元素部分排序 partial_sort_copy 对给定区间复制并排序 nth_element 找出给定区间的某个位置对应的元素 is_sorted 判断一个区间是否已经排好序 partition 使得符合某个条件的元素放在前面 stable_partition 相对稳定的使得符合某个条件的元素放在前面

(一)实现按升序排列(没有cmp) 代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
   int a[100];
   int n;
   cin>>n;
   for(int i = 0;i < n;i ++){
    cin>>a[i];
   }
   sort(a,a+n);
   for(int i = 0;i < n;i ++){
    cout<<a[i]<<" ";
   }
    return 0;
}

结果:

(二)实现按降序排列 需要用到sort函数中的第三个参数啦~ 加入比较函数compare(); 函数的实现过程如下: bool compare(int a,int b){ return a>b;}

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include <algorithm>
using namespace std;

bool compare(int a,int b){
    return a>b;
}
int main()
{
   int a[100];
   int n;
   cin>>n;
   for(int i = 0;i < n;i ++){
    cin>>a[i];
   }
   sort(a,a+n,compare);
   for(int i = 0;i < n;i ++){
    cout<<a[i]<<" ";
   }

    return 0;
}

结果:

2.Unique函数

unique的作用是“去掉”容器中相邻元素的重复元素,“去掉”本质是将重复的元素移动到数组的末尾,最后再将迭代器末尾指向最后不重复的下标。也包含在头文件为#include< algorithm>的c++标准库中。

一般使用前需要对容器进行排序,这样才能实现对整个数组去重。 代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
   int a[100];
   int n;
   cin>>n;
   for(int i = 0;i < n;i ++){
    cin>>a[i];
   }
   int m = unique(a,a+n)-a;
   cout<<m<<endl;
   for(int i = 0;i < m;i ++){
    cout<<a[i]<<" ";
   }

    return 0;
}

结果:

3.最后,附上完整的代码~
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
   int a[100];
   int n;
   cin>>n;
   for(int i = 0;i < n;i ++){
    cin>>a[i];
   }
   sort(a,a+n);
   int m = unique(a,a+n)-a;
   cout<<m<<endl;
   for(int i = 0;i < m;i ++){
        if(i == m-1) cout<<a[i];
    else cout<<a[i]<<" ";
   }

    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-03-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C++ sort()排序详解
 在刷题的时候我们经常会碰到排序的问题,如果我们不使用一些排序的方法那我们只能手撕排序,这样就会浪费一些时间。而且我们还需要根据需要去选择相关的排序方法:冒泡排序、快速排序、插入排序、希尔排序、归并排序、选择排序、堆排序、基数排序、桶排序。在选择的过程中也需要我们花费一些时间,所以在明白这些经典排序的情况下再一遍一遍的手写就有点浪费时间啦!  如果我们使用sort()方法就可以只需要一条语句就可以实现排序,这样就极大的节省了我们在刷题中所花费的时间。当然如果对这些经典的排序方法不熟悉的话还是建议大家去了解一下这些方法,比较一下这些方法的优劣以及使用的情景。
全栈程序员站长
2022/08/25
4.1K0
C++ STL (标准模板库) 详细内容讲解
顺序容器有以下三种:可变长动态数组 vector、双端队列 deque、双向链表 list。
杨鹏伟
2020/09/11
2.1K0
C++ STL之排序算法
排序算法和查找算法差不多,也涉及到迭代器区间问题,关于该问题的注意事项就不在啰嗦了 一、全部排序sort、stable_sort sort是一种不稳定排序,使用时需要包含头文件algorithm 默认可以传两个参数或三个参数。第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。如果只传入这两个地址的话,就按照升序对指定地址区间排序。想要按照降序排列的话,需要传入第三个函数,第三个函数可以自己写cmp,也可以直接调用库函数 greater<data-type>(),使用库函数的时候要包含头文件f
用户1215536
2018/02/05
8290
unique函数用法
返回值:返回的是去重后的不重复数列中最后一个元素的下一个元素的地址(注意是类似于0x的真正地址)
用户8224910
2021/05/10
1.2K0
unique函数用法
sort() function
我在之前的博客中提到,解决排序问题的一个好用的函数就是C++的sort()函数啦。sort()函数是C++内置的函数,只需要加入头文件,掌握正确的使用方法,你就可以在排序中驰骋疆场了(自吹自擂)。好啦,下面就请主角登场吧
AngelNH
2020/04/15
1.3K0
sort() function
每日算法刷题Day11-最大公约数、数组去重
输入两个整数 a 和 b,请你编写一个函数,int gcd(int a, int b), 计算并输出 a 和 b 的最大公约数。
timerring
2022/09/27
4410
每日算法刷题Day11-最大公约数、数组去重
熟练使用STL标准库是每个C++程序员的必备技能!_舞蹈基础教学视频
STL库还有很多内容,比如:向量(vector)、栈(stack)、队列(queue)、优先队列
全栈程序员站长
2022/11/03
3990
熟练使用STL标准库是每个C++程序员的必备技能!_舞蹈基础教学视频
杨校老师课堂之基于C++的结构体排序相结合解题_信息学奥赛-基础练习题
问题描述: 刚举行的万米长跑活动中,有 N 个人跑完了全程,所用的时间都不相同。颁奖时为了增加趣味性,随机抽了一个数 K,要奖励第 K 名一双跑鞋。 现在组委会给你 N 个人的姓名、成绩(用时,单位是秒),请你编程快速输出第 K 名的姓名。
杨校
2025/02/23
840
杨校老师课堂之基于C++的结构体排序相结合解题_信息学奥赛-基础练习题
九度OJ——1014排名
题目描述: 今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完成的题数排序,没有考虑每题的分值,所以并不是最后的排名。给定录取分数线,请你写程序找出最后通过分数线的考生,并将他们的成绩按降序打印。 输入: 测试输入包含若干场考试的信息。每场考试信息的第1行给出考生人数N ( 0 < N < 1000 )、考题数M ( 0 < M < = 10 )、分数线(正整数)G;第2行排序给出第1题至第M题的正整数分值;以下N行,每行给出一名考生的准考证号(长度不超过20的字符串)、该生解决的题目总数m、以及这m道题的题号(题目号由1到M)。 当读入的考生人数为0时,输入结束,该场考试不予处理。 输出: 对每场考试,首先在第1行输出不低于分数线的考生人数n,随后n行按分数从高到低输出上线考生的考号与分数,其间用1空格分隔。若有多名考生分数相同,则按他们考号的升序输出。 样例输入: 4 5 25 10 10 12 13 15 CS004 3 5 1 3 CS003 5 2 4 1 3 5 CS002 2 1 2 CS001 3 2 3 5 1 2 40 10 30 CS001 1 2 2 3 20 10 10 10 CS000000000000000001 0 CS000000000000000002 2 1 2 0 样例输出: 3 CS003 60 CS001 37 CS004 37 0 1 CS000000000000000002 20
AI那点小事
2020/04/18
3980
杨校老师课堂之基于C++的sort排序与字符串解题_信息学奥赛-基础练习题
题目描述 陈平安参加了Coduck王国举办的记忆之王比赛,比赛规则是给出一篇文章,让所有选手以最快的速度进行记忆,记忆时间最短的三名选手依次获得记忆之王、记忆强者、记忆达人的称号,本次比赛一共有n名选手参赛,请根据他们的的记忆时间,选出其中最短的三个时间按从小到大的顺序输出。
杨校
2025/02/23
650
Basic Algorithms
Basic Algorithm Problem Solving Record (Include ACWing Course Notes)
alanzeng
2025/01/14
870
sort函数对vector排序_sort函数对结构体数组排序
今天写代码的是遇到想对vector进行排序的问题,隐约记得std::sort函数是可以对vector进行排序的,但是这次需要排序的vector中压的是自己定义的结构体(元素大于等于2),想以其中某一个元素进行正序或逆序排序,则不能直接使用sort函数。
全栈程序员站长
2022/09/21
1.8K0
第六届华北水利水电大学校赛正式赛(前五题)
最近这段时间有很多男孩子使用漂亮女孩子的头像在社交软件上聊天,这让聊天软件上的人区分屏幕对面的人的性别这件事变得很困难。 最近耗子哥在网上和一个使用美女头像的人聊的很开心,但是却不知道对面是男是女。耗子哥很害羞,他不敢问对方要照片或者打视频电话,他只能通过对方的网络昵称来判断对方是男是女,如果昵称中不同字符的数目是奇数,那么对方就是男性,否则是女性,如果对方是男性,那么将不符合耗子哥的心理预期,输出” IGNORE HIM!” ,让耗子哥忽略他,寻找下一个目标,否则输出” CHAT WITH HER!” 同时耗子哥会很高兴,我们希望耗子哥高兴,但是不希望你骗他,所以,如果欺骗耗子哥的感情是不能通过题目的。
啊QQQQQ
2024/11/19
360
第六届华北水利水电大学校赛正式赛(前五题)
qsort(),sort()排序函数
一.qsort()函数 功 能: 使用快速排序例程进行排序 头文件:stdlib.h 用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *)); 参数: 1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针,用于确定排序的顺序 qsort(即,quicksort)主要根据你给的比较条件给一个快速排序,主要是通过指针移动
猿人谷
2018/01/17
2.1K0
C++STL中set的使用策略(二)
       下面来看一道PAT上的题——列车调度(L2—014)        用set完美解决 #include <bits/stdc++.h> using namespace std; int main() {     int i,j,k,n,x;     set<int> s;//定义一个名为s的集合     while(cin>>n)     {         for(int i = 0;i < n;i++)         {             cin>>x;             i
mathor
2018/06/22
5870
9.1 C++ STL 排序、算数与集合
C++ STL(Standard Template Library)是C++标准库中的一个重要组成部分,提供了丰富的模板函数和容器,用于处理各种数据结构和算法。在STL中,排序、算数和集合算法是常用的功能,可以帮助我们对数据进行排序、统计、查找以及集合操作等。
王瑞MVP
2023/08/17
2300
蓝桥杯 基础练习 数列排序
第一行为一个整数n。 第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
Meng小羽
2019/12/23
4020
Archived | 306-07-关系型容器
我们可以发现所谓一些数据结构比如说数组和链表,它们都有一些相似的性质。我们看下面两个例子:
gyro永不抽风
2021/05/21
4360
C++ sort排序函数用法
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/132002.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/30
5430
详解树状数组(C/C++)
树状数组(Binary Indexed Tree,简称BIT或Fenwick Tree)是一种用于高效处理数据序列的算法数据结构。它能够支持两个主要操作:单点更新和区间求和,这两个操作的时间复杂度都能达到O(log n),其中 n 是数据序列的长度。树状数组非常适合处理那些需要频繁更新和查询区间和的问题。
摆烂小白敲代码
2024/09/23
1910
详解树状数组(C/C++)
相关推荐
C++ sort()排序详解
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验