【算法】归并排序模板

news/2024/5/17 15:59:55 标签: 算法, 数据结构, c++, 蓝桥杯, 归并排序

对于输入序列 9 1 0 5 4,超快速排序生成输出 0 1 4 5 9

您的任务是确定超快速排序需要执行多少交换操作才能对给定的输入序列进行排序。

输入格式

输入包括一些测试用例。

每个测试用例的第一行输入整数 n,代表该用例中输入序列的长度。

接下来 n 行每行输入一个整数 ai,代表用例中输入序列的具体数据,第 i行的数据代表序列中第 i个数。当输入用例中包含的输入序列长度为 0 时,输入终止,该序列无需处理。

输出格式

对于每个需要处理的输入序列,输出一个整数 op,代表对给定输入序列进行排序所需的最小交换操作数,每个整数占一行。

数据范围

0≤n<5000000
一个测试点中,所有 n的和不超过 500000
0≤ai≤999999999

输入样例:
5
9
1
0
5
4
3
1
2
3
0
输出样例:
6
0

 分析:

while(cin>>n&&n){//如果这里“&&”用“,”会超时
        for(int i=1;i<=n;i++) cin>>a[i];
        cout<<merge_sort(1,n)<<endl;
    } 

在这段代码中,while(cin>>n&&n) 是一个循环的条件,它包含两个主要的条件:

  1. cin >> n这个表达式从标准输入(通常是键盘)读取一个整数,并尝试将它赋值给变量 n。如果读取成功,这个表达式的结果是输入流对象 cin,它会在布尔上下文中被解释为 true。如果读取失败(例如,因为输入结束或者输入的不是一个整数),这个表达式的结果是 false,循环将终止。

  2. n这个条件检查变量 n 是否非零。在布尔上下文中,非零值被解释为 true,零值被解释为 false因此,如果 n 是零,循环将终止。

这两个条件用 &&(逻辑与)连接,意味着只有当两个条件都为 true 时,整个条件才为 true,循环才会继续。

现在,如果你把 && 替换为 ,(逗号),这两个条件将不再被逻辑与连接。在 C++ 中,逗号运算符 , 会计算其左侧的操作数,丢弃其结果,然后计算其右侧的操作数,并返回右侧操作数的结果。因此,条件 cin >> n, n 将实际上只检查 n 是否非零。即使 cin >> n 失败(例如,因为输入结束),循环仍会继续执行,因为逗号运算符不会考虑 cin >> n 的结果。

 

#include<iostream>
#define N 500010
using namespace std;

int a[N];
long long merge_sort(int l,int r){
    int p[N];//记排序后的数列
    if(l>=r) return 0;
    int mid=(l+r)>>1;
    long long res=merge_sort(l,mid)+merge_sort(mid+1,r);
    int i=l,j=mid+1,k=0;
    while(i<=mid&&j<=r){
        if(a[i]<a[j]){
            p[k++]=a[i++];
        }
        else{
            p[k++]=a[j++];
            res+=mid-i+1;
        }
    }
    while(i<=mid) p[k++]=a[i++];
    while(j<=r) p[k++]=a[j++];
    for(i=l,j=0;j<k;i++,j++){
        a[i]=p[j];
    }
    return res;    
        
}
int main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int n;
    while(cin>>n&&n){//如果这里“&&”用“,”会超时
        for(int i=1;i<=n;i++) cin>>a[i];
        cout<<merge_sort(1,n)<<endl;
    }

    return 0;
    
}

http://www.niftyadmin.cn/n/5436267.html

相关文章

grpc python实现异步调用(不用grpc异步接口)

grpc python实现异步调用[不用grpc异步接口] 1.infer_session.proto2.生成Python库函数3.infer_session_server.py4.infer_session_client.py5.common.py6.运行7.输出 grpc同步调用更简单,但是在处理复杂任务时,会导致请求阻塞,影响吞吐。当然,可以采用grpc异步接口解决,本方采…

一个页面请求从在浏览器中输入网址到页面最终呈现

前言-与正文无关 生活远不止眼前的苦劳与奔波&#xff0c;它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中&#xff0c;我们往往容易陷入工作的漩涡&#xff0c;忘记了停下脚步&#xff0c;感受周围的世界。让我们一起提醒自己&#xff0c;要适时放慢脚步…

centos7修改ssh登录错误限制和端口修改

前几天登录服务器的时候发现有错误登录信息15w多条&#xff0c;该服务器映射了外网&#xff0c;估计是被爆破了。为了防止再有人进行爆破&#xff0c;修改一下ssh的限制登录顺便把默认端口改掉 编辑ssh配置文件 vim /etc/ssh/sshd_config去掉注释 按需修改次数 MaxAuthTries 6…

1.详细解释单链表中的头结点;2.Java算法——力扣707题:设计链表

1.详细解释单链表中的头结点 在做这道算法之前&#xff0c;首先务必要弄明白三个问题&#xff1a; 对于含头节点的单链表&#xff0c; 头结点是否是第一个节点&#xff1f;单链表的长度是否包含该头节点&#xff1f;头结点是否有索引&#xff1f;如果有的话&#xff0c;又是多…

springBoot项目,无配置中心,怎么实现类似功能

实现EnvironmentPostProcessor import cn.hutool.http.HttpUtil; import org.springframework.boot.SpringApplication; import org.springframework.boot.env.EnvironmentPostProcessor; import org.springframework.boot.env.YamlPropertySourceLoader; import org.springfr…

Rocky Linux - Primavera P6 EPPM 安装及分享

引言 继上一期发布的Redhat Linux版环境发布之后&#xff0c;近日我又制作了基于Rocky Enterprise Linux 的P6虚拟机环境&#xff0c;同样里面包含了全套P6 最新版应用服务 此虚拟机仅用于演示、培训和测试目的。如您在生产环境中使用此虚拟机&#xff0c;请先与Oracle Primav…

第四章 Java 网络编程

一、OSI 七层模型和 TCP/IP 四层模型 1、OSI&#xff08;Open System Interconnect&#xff09;&#xff0c;即开放式系统互联。 一般都叫 OSI 参考模型&#xff0c;是 ISO&#xff08;国际标准化组织&#xff09;组织在 1985 年研究的网络互联模型。 2、TCP/IP 协议栈是美国国…

我手写的轮子开源了

我手写的轮子开源了 文章目录 1.gitee坐标和地址1.1.gitee坐标1.2.gitee地址 2.github坐标和地址2.1.github坐标2.2.github地址 3.总结 1.gitee坐标和地址 1.1.gitee坐标 <dependency><groupId>io.gitee.bigbigfeifei</groupId><artifactId>es-sprin…