我在之前的博客中提到,解决排序问题的一个好用的函数就是C++的sort()函数啦。sort()函数是C++内置的函数,只需要加入头文件,掌握正确的使用方法,你就可以在排序中驰骋疆场了(自吹自擂)。好啦,下面就请主角登场吧
c++语言中 STL 库中的sort函数可以用来对数组进行排序。对于c++语言来说由于其自带的sort()函数更容易被编译器编译,其排序速度比基于快速排序的qsort要快上不少,且用法简单。(百度知道)
sort()函数的使用需要添加头文件
#include<algorithm>
或者万能头文件
#include<bits/stdc++.h>
sort(star,end,cmp)*
sort函数有三个参数:
1.第一个是要排序的数组的起始地址
2.第二个是结束地址(最后一位的地址的下一地址)
3.第三个参数是排序的方法。sort函数默认是按从小到大排序。可以修改cmp实现从大到小排序
sort(begin,end,less<data-type>)——升序
sort(begin,end,greater<data-type>)——降序
以上是比较简单常用的对数组的排序方法,sort()类函数中还有其他的排序功能。
函数名 | 功能描述 |
---|---|
sort | 对给定区间所有元素进行排序 |
stable_sort | 对给定区间所有元素进行稳定排序 |
partial_sort | 对给定区间所有元素进行稳定排序 |
partial_sort | 对给定区间所有元素部分排序 |
partial_sort_copy | 对给定区间复制并排序 |
nth_element | 找出给定区间的某个位置对应的元素 |
is_sorted | 判断一个区间是否已经排好序 |
partition | 使得符合某个条件的元素放在前面 |
stable_partition | 相对稳定的使得符合某个条件的元素放在前面 |
链接:
https://ac.nowcoder.com/acm/contest/827/J
来源:牛客网
题目描述
输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。
输入描述:
输入包含三行,
第一行包含两个正整数n, m(1 ≤ n,m ≤ 100),用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。
第二行包含n个整数(范围1~5000),用空格分隔。
第三行包含m个整数(范围1~5000),用空格分隔。
输出描述:
输出为一行,输出长度为n+m的升序序列,即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并。
示例1
输入 5 6 1 3 7 9 22 2 8 10 17 33 44 输出 1 2 3 7 8 9 10 17 22 33 44
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int n,m,t;
int a[100],b[100],c[200];
int main()
{
cin>>n>>m;
t=n;
for(int i=0;i<n;i++)
{
cin>>a[i];
c[i]=a[i];
}
for(int i=0;i<m;i++)
{
cin>>b[i];
c[t++]=b[i];
}
sort(c,c+m+n);
for(int i=0;i<m+n;i++)
{
cout<<c[i];
putchar(' ');
}
return 0;
}
链接:
https://ac.nowcoder.com/acm/contest/827/E
来源:牛客网
题目描述
输入n个成绩,换行输出n个成绩中最高分数和最低分数的差。
输入描述:
两行,第一行为n,表示n个成绩,不会大于10000。
第二行为n个成绩(整数表示,范围0~100),以空格隔开。
输出描述:
一行,输出n个成绩中最高分数和最低分数的差。
示例1
输入
10
98 100 99 97 95 99 98 97 96 100
输出
5
#include<stdio.h>
#include<algorithm>
#include<iostream>
using namespace std;
int main()
{
int n,a[10000],sum=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n);
sum=a[n-1]-a[0];
printf("%d",sum);
return 0;
}