前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >蒜头君的随机数 【C++ 的排序与去重(sort函数与unique函数)】

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

作者头像
且陶陶
发布2023-04-12 14:43:15
7450
发布2023-04-12 14:43:15
举报
文章被收录于专栏:Triciaの小世界

问题描述

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

输入格式

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

输出格式

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

样例输入
代码语言:javascript
复制
10
20 40 32 67 40 20 89 300 400 15
样例输出
代码语言:javascript
复制
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
复制
#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
复制
#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
复制
#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
复制
#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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题描述
  • 输入格式
  • 输出格式
    • 样例输入
      • 样例输出
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档