排序目录:

  • 一.sort()
  • 二.stable_sort()
  • 三.merge()
    • 1.merge函数的作用:
    • 2.为什么引入归并排序merge()函数
    • 3.代码
    • 4.例题P1309 瑞士轮

一.sort()

cppreference中的详细解释

二.stable_sort()

stable_sort()遇见大小相同的值不会改变他们的位置
cppreference中的详细解释

三.merge()

cppreference中的详细解释

1.merge函数的作用:

将两个有序的序列合并为一个有序的序列。函数参数:merge(first1,last1,first2,last2,result,compare);
first1为第一个容器的首迭代器,last1为第一个容器的末迭代器,first2为第二个容器的首迭代器,last2为容器的末迭代器,result为存放结果的容器,comapre为比较函数(可忽略,默认为合并为一个升序序列)。

2.为什么引入归并排序merge()函数

归并排序和sort(快速排序)的时间复杂度都是O(nlogn),归并排序每次的操作只针对相邻区间,或者说合并时是对相邻几个区间的操作,所以这符合只需要修改相邻几个分数的排布状况的题意。即使和快排的复杂度相同,但是省掉了冗杂无用的操作,是一个极大的改良。如例题P1309 瑞士轮

3.代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=2e5+10;
ll a[N]={1,3,5,7,9},b[N]={2,4,6,8,10};
int main()
{merge(a,a+5,b,b+5,ostream_iterator<int>(cout," "));cout<<endl;return 0;
}

输出:

1 2 3 4 5 6 7 8 9 10
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=2e5+10;
ll a[N]={9,7,5,3,1},b[N]={10,8,6,4,2};
bool cmp(ll a,ll b)
{return a>b;
}
int main()
{merge(a,a+5,b,b+5,ostream_iterator<int>(cout," "),cmp);cout<<endl;return 0;
}

输出:

10 9 8 7 6 5 4 3 2 1

4.例题P1309 瑞士轮

P1309 瑞士轮
题目描述
2×N 名编号为 1∼2N 的选手共进行R 轮比赛。每轮比赛开始前,以及所有比赛结束后,都会按照总分从高到低对选手进行一次排名。选手的总分为第一轮开始前的初始分数加上已参加过的所有比赛的得分和。总分相同的,约定编号较小的选手排名靠前。
每轮比赛的对阵安排与该轮比赛开始前的排名有关:第1 名和第2 名、第 3 名和第 4名、……、第2K−1名和第2K名、…… 、第2N−1名和第2N名,各进行一场比赛。每场比赛胜者得1分,负者得 0分。也就是说除了首轮以外,其它轮比赛的安排均不能事先确定,而是要取决于选手在之前比赛中的表现。
现给定每个选手的初始分数及其实力值,试计算在R 轮比赛过后,排名第Q 的选手编号是多少。我们假设选手的实力值两两不同,且每场比赛中实力值较高的总能获胜。
输入格式
第一行是三个正整数N,R,Q,每两个数之间用一个空格隔开,表示有 2×N名选手、R 轮比赛,以及我们关心的名次 Q。
第二行是2×N 个非负整数s1,s2,…,s2N,每两个数之间用一个空格隔开,其中si
表示编号为i 的选手的初始分数。 第三行是2×N 个正整数w1,w2,…,w2N,每两个数之间用一个空格隔开,其中 wi表示编号为i 的选手的实力值。
输出格式
一个整数,即R 轮比赛结束后,排名第Q 的选手的编号。
输入

2 4 2
7 6 6 7
10 5 20 15

输出

1
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=2e5+10;
ll n,r,q;
struct person
{ll s,idx,w;bool operator<(const person &t)const // 重载运算符{if(t.s!=s)return s>t.s;return idx<t.idx;}
}p[N],loser[N],winer[N];
int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>n>>r>>q;for(int i=1;i<=2*n;i++)cin>>p[i].s;for(int i=1;i<=2*n;i++){cin>>p[i].w;p[i].idx=i;}sort(p+1,p+1+2*n);while(r--){for(int i=1;i<=n;i++){if(p[2*i-1].w<p[i*2].w){p[i*2].s++;loser[i]=p[2*i-1];winer[i]=p[2*i];}else {p[2*i-1].s++;loser[i]=p[2*i];winer[i]=p[2*i-1];}}merge(loser+1,loser+1+n,winer+1,winer+1+n,p+1);//储存到p中,从p+1开始}cout<<p[q].idx;return 0;
}

注:如果您通过本文,有(qi)用(guai)的知识增加了,请您点个赞再离开,如果不嫌弃的话,点个关注再走吧,日更博主每天在线答疑 ! 当然,也非常欢迎您能在讨论区指出此文的不足处,作者会及时对文章加以修正 !如果有任何问题,欢迎评论,非常乐意为您解答!( •̀ ω •́ )✧

排序算法—sort(),stable_sort(),merge()相关推荐

  1. 归并有效排序算法matlab,科学网—[用MATLAB写算法]之排序算法2)归并排序merge sort - 徐勇刚的博文...

    归并排序(merge sort)是一种利用分治策略(divide and conquer)进行排序的算法,算法复杂度为 $\Theta (nlog_{2}n)$ . filename: merge_s ...

  2. 排序算法之 Inplace Merge Sort

    Non-recursive Merge Sort (cpp_merge_sort.cc) ======================================================= ...

  3. 排序算法 | sort函数的使用

    除了我们自己写的排序算法:冒泡排序.选择排序等,C语言中提供了库函数qsort或者C++中提供了sort函数可以直接调用进行排序.考虑到qsort函数的使用需要用到指针,且写法上也没有sort函数简洁 ...

  4. [5 算法] 31. 了解各种排序选择(partition,stable_partition,nth_element,partial_sort,sort,stable_sort)

    1 完全排序sort 排序首先想到的是sort,但它并非在任何场合都是完美的,因为有时你不需要一个完全的排序. 2 部分排序partial_sort 如果你有一个存放Widget的vector,你需要 ...

  5. java python算法_用Python,Java和C ++示例解释的排序算法

    java python算法 什么是排序算法? (What is a Sorting Algorithm?) Sorting algorithms are a set of instructions t ...

  6. 排序算法中——归并排序和快速排序

    冒泡排序.插入排序.选择排序这三种算法的时间复杂度都为 $O(n^2)$,只适合小规模的数据.今天,我们来认识两种时间复杂度为 $O(nlogn)$ 的排序算法--归并排序(Merge Sort)和快 ...

  7. 算法与数据结构(排序算法概述)

    排序算法 Sort Algorithm 排序算法是将一系列数据根据指定的顺序进行排列的过程 排序算法的分类: 内部排序:指将需要处理的所有数据都加载到内存中进行排序 插入排序 直接插入排序 希尔排序 ...

  8. 合并排序算法排序过程_合并排序| 用于大型输入的最佳排序算法之一

    合并排序算法排序过程 What is sorting? 什么是分类? Sorting allows us to process our data in a more organized and eff ...

  9. 解释什么是快速排序算法?_解释排序算法

    解释什么是快速排序算法? Sorting algorithms are a set of instructions that take an array or list as an input and ...

最新文章

  1. Cisco交换机端口安全介绍
  2. VMProtect 与 ASProtect 在VC中的SDK编程
  3. Gentoo源码安装
  4. Install ruby on rails in Ubuntu 12.04
  5. java大作业私人管家系统_重庆管家婆软件丨管家婆工贸PRO的E-MES管理详解
  6. MongoDB(一)——简介
  7. 转 GRE -- ME 似乎有件事,一直等待着我去做,努力去做。
  8. 使用shell脚本实现二进制、十进制、十六进制转换
  9. 5类6类7类网线对比_5类6类7类网线到底有什么区别?
  10. 安卓手机如何更改开机 关机 动画
  11. 第十一届蓝桥杯c/c++省赛大学B组(第一次)
  12. docker学习(四) 配置阿里云镜像加速器
  13. PPT基础(十五)调整形状的透明度
  14. 浏览器Cookie大小、个数限制
  15. P1010 幂次方 【分治递归】
  16. CentOS 8.2 + xrdp + gnome3 + 经典桌面
  17. 观自在菩萨菠萝菠萝蜜心经
  18. 我没想到,做IT还有感动众生的机会
  19. 汽车制造业的市场压力与期待是并存吗?
  20. 高性能反向代理服务器Nginx

热门文章

  1. 基于关键帧的RGB-D视觉惯性里程计
  2. 任意多相机系统的SLAM重设计
  3. 10个例子带你了解机器学习中的线性代数
  4. postgre 常用语法,如 group_concat用法
  5. 英文版windows乱码问题(win7/8/10)
  6. 去掉chrome记住密码后自动填充表单的黄色背景
  7. 正则表达式基础(一)
  8. 如何管理项目中外包开发人员、测试人员
  9. ganglia访问时出现“You don‘t have permission to access /ganglia/ on this server“
  10. 学计算机excel就很好吗,零基础学习excel小技巧